jQuery trova elemento in base al valore dell'attributo dati


103

Ho alcuni elementi come di seguito:

<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>

Come posso aggiungere una classe all'elemento che ha un data-slidevalore di attributo di0 (zero)?

Ho provato molte soluzioni diverse ma niente ha funzionato. Un esempio:

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

Qualche idea?


2
Per spiegare un po 'le cose qui, il motivo per cui questo non funziona è perché stai cercando di trovare i discendenti di .slide-linkcon l'attributo di [data-slide="0"]. Poiché qualcosa non può essere un discendente di se stesso, non ha nulla da restituire. Tuttavia, se avessi un wrapper attorno a questi collegamenti, allora avrebbe funzionato:$('.slide-link-wrapper').find('[data-slide="0"]').addClass('active');
— DondeEstaMiCulo

Risposte:


225

Usa il selettore Attribute Equals

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

Fiddle Demo

.trova()

funziona lungo l'albero

Ottieni i discendenti di ogni elemento nel set corrente di elementi corrispondenti, filtrati da un selettore, un oggetto jQuery o un elemento.


2
Colpa mia. L'avevo provato ma nel posto sbagliato (prima di aggiungere dinamicamente i miei elementi ...). Comunque grazie per lo sforzo! Funziona bene.
— MrUpsidown

@MrUpsidown Benvenuto Felice di aiutare :)
— Tushar Gupta - curioustushar

1
Wow! questa soluzione è fantastica! Ho avuto un problema per ore ma questo lo ha risolto!

come lo equiparo a un valore variabile var slidernumber = "0";, invece che alla costante "0"?
— tony gil

Se per qualche motivo non puoi dipendere dalla presenza di una certa classe, puoi semplicemente usare un carattere jolly per la prima parte come questo $ ('* [data-slide = "0"]'). AddClass ('active') ;
— SeanMC

59

Puoi anche usare .filter ()

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

5

Ho cercato la stessa soluzione con una variabile invece della stringa.
Spero di poter aiutare qualcuno con la mia soluzione :)

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

3

puoi anche usare il andSelf()metodo per ottenere il wrapper DOM che contiene, quindi find()puoi aggirare la tua idea

$(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>

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.