jQuery-Element nach Datenattributwert suchen


102

Ich habe ein paar Elemente wie unten:

<a class="slide-link" href="#" data-slide="0">1</a>
<a class="slide-link" href="#" data-slide="1">2</a>
<a class="slide-link" href="#" data-slide="2">3</a>

Wie kann ich dem Element eine Klasse hinzufügen, die den data-slideAttributwert 0(Null) hat?

Ich habe viele verschiedene Lösungen ausprobiert, aber nichts hat funktioniert. Ein Beispiel:

$('.slide-link').find('[data-slide="0"]').addClass('active');

Irgendeine Idee?


2
Um die Dinge hier ein wenig zu erklären, ist der Grund, warum dies nicht funktioniert, der, dass Sie versuchen, die Nachkommen von .slide-linkmit dem Attribut von zu finden [data-slide="0"]. Da etwas kein Nachkomme von sich selbst sein kann, muss es nichts zurückgeben. Wenn Sie jedoch einen Wrapper um diese Links $('.slide-link-wrapper').find('[data-slide="0"]').addClass('active');
— gehabt

Antworten:


222

Verwenden Sie Attribute Equals Selector

$('.slide-link[data-slide="0"]').addClass('active');

Fiddle Demo

.finden()

es funktioniert den Baum hinunter

Ruft die Nachkommen jedes Elements in der aktuellen Gruppe übereinstimmender Elemente ab, gefiltert nach einem Selektor, einem jQuery-Objekt oder einem Element.


2
Mein Fehler. Ich hatte das versucht, aber an der falschen Stelle (bevor ich meine Elemente dynamisch hinzufügte ...). Trotzdem danke für die Mühe! Funktioniert gut.
— MrUpsidown

@ MrUpsidown Willkommen Gerne helfen :)
— Tushar Gupta - Curioustushar

1
Beeindruckend! Diese Lösung ist großartig! Hatte stundenlang ein Problem, aber das hat es behoben!

Wie setze ich es mit einem variablen Wert var slidernumber = "0";anstelle der Konstanten gleich "0"?
— Tony Gil

Wenn Sie sich aus irgendeinem Grund nicht darauf verlassen können, dass eine bestimmte Klasse vorhanden ist, können Sie einfach einen Platzhalter für den ersten Teil wie diesen $ ('* [data-slide = "0"]') verwenden. AddClass ('active') ;;
— SeanMC


5

Ich suchte nach der gleichen Lösung mit einer Variablen anstelle des Strings.
Ich hoffe ich kann jemandem mit meiner Lösung helfen :)

var numb = "3";
$(`#myid[data-tab-id=${numb}]`);

3

Sie können auch die andSelf()Methode verwenden, um das Wrapper-DOM zu erhalten, und dann find()als Ihre Idee umgehen

$(function() {
  $('.slide-link').andSelf().find('[data-slide="0"]').addClass('active');
})
.active {
  background: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a class="slide-link" href="#" data-slide="0">1</a>
<a class="slide-link" href="#" data-slide="1">2</a>
<a class="slide-link" href="#" data-slide="2">3</a>

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.