jQuery find élément par valeur d'attribut de données


103

J'ai quelques éléments comme ci-dessous:

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

Comment puis-je ajouter une classe à l'élément qui a une data-slidevaleur d'attribut de 0(zéro)?

J'ai essayé de nombreuses solutions différentes mais rien n'a fonctionné. Un exemple:

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

Une idée?


2
Pour expliquer un peu les choses ici, la raison pour laquelle cela ne fonctionne pas est que vous essayez de trouver les descendants de .slide-linkavec l'attribut de [data-slide="0"]. Puisque quelque chose ne peut pas être un descendant de lui-même, il n'a rien à retourner. Cependant, si vous aviez un wrapper autour de ces liens, cela aurait fonctionné:$('.slide-link-wrapper').find('[data-slide="0"]').addClass('active');
— DondeEstaMiCulo

Réponses:


225

Utiliser le sélecteur d'attribut égal

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

Fiddle Demo

.trouver()

ça marche dans l'arbre

Obtenez les descendants de chaque élément dans l'ensemble actuel d'éléments correspondants, filtrés par un sélecteur, un objet jQuery ou un élément.


2
Ma faute. J'avais essayé ça mais au mauvais endroit (avant d'ajouter mes éléments dynamiquement ...). En tout cas merci pour l'effort! Fonctionne très bien.
— MrUpsidown

@MrUpsidown Welcome Happy to help :)
— Tushar Gupta - curioustushar

1
Hou la la! cette solution est géniale! J'ai eu un problème pendant des heures mais cela l'a résolu!

comment est-ce que je l'assimile à une valeur variable var slidernumber = "0";, au lieu de la constante "0"?
— tony gil le

Si, pour une raison quelconque, vous ne pouvez pas dépendre d'une certaine classe, vous pouvez simplement utiliser un caractère générique pour la première partie comme ceci $ ('* [data-slide = "0"]'). AddClass ('active') ;
— SeanMC

59

Vous pouvez également utiliser .filter ()

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

5

J'ai recherché la même solution avec une variable au lieu de la chaîne.
J'espère pouvoir aider quelqu'un avec ma solution :)

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

3

vous pouvez également utiliser la andSelf()méthode pour obtenir le conteneur DOM, puis find()contourner votre idée

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.