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.