Disons que j'ai 4 éléments div avec class .navlink
, qui, lorsqu'ils sont cliqués, utilisent .data()
pour définir une clé appelée 'selected'
, à une valeur de true
:
$('.navlink')click(function() { $(this).data('selected', true); })
Chaque fois que vous .navlink
cliquez sur un nouveau , je souhaite stocker le précédent sélectionné navlink
pour une manipulation ultérieure. Existe-t-il un moyen rapide et facile de sélectionner un élément en fonction de ce qui a été stocké .data()
?
Il ne semble pas y avoir de jQuery : des filtres qui correspondent à la facture, et j'ai essayé ce qui suit (dans le même événement de clic), mais pour une raison quelconque, cela ne fonctionne pas:
var $previous = $('.navlink').filter(
function() { $(this).data("selected") == true }
);
Je sais qu'il existe d'autres façons d'accomplir cela, mais pour le moment, je suis surtout curieux de savoir si cela peut être fait via .data()
.
$("*").filter(function() { return $(this).data("DATA IDENTIFIER HERE") == DATA VALUE HERE; });
Juste pour mémoire, vous pouvez filtrer sur les données avec jquery (cette question est assez ancienne, et jQuery a évolué depuis, il est donc juste d'écrire cette solution également):
ou mieux (pour les performances):
ou, si vous voulez obtenir tous les éléments avec
data-selected
set:Notez que cette méthode ne fonctionnera qu'avec les données définies via les attributs html. Si vous définissez ou modifiez des données avec l'
.data()
appel, cette méthode ne fonctionnera plus.la source
.data()
méthode au lieu d'undata-
attribut. Voir ce violon: jsfiddle.net/bryandowning/tySWC - De plus, la.find()
méthode recherche les enfants du sélecteur précédent. Dans l'exemple donné,data-selected
est un attribut de.navlink
, pas un enfant de.navlink
. Aussi,$('div p')
et$('div').find('p')
sont essentiellement équivalents. L'utilisation.find()
semble être plus lente en raison de l'appel de fonction supplémentaire (bien que je ne sois pas certain à ce sujet). Veuillez me corriger si je me trompe à ce sujet (je souhaite vraiment que cette méthode fonctionne)..data()
, puisque jQuery recherche dans le DOM, je l'ai posté pour ceux (comme moi) qui sont arrivés à cette question pour d'autres raisons; 2) correct,.find()
recherche parmi les enfants, donc c'est faux dans cet exemple; 3) vous vous trompez, ils ne sont pas équivalents, car jQuery recherche de droite à gauche, voir jonraasch.com/blog$('[data-selected]')
cela m'a aidé pour quelque chose comme$('ul.categories a[data-categories_id]').click(......);
Nous pouvons créer un plugin assez facilement:
Utilisation (vérification d'un bouton radio):
la source
Deux choses que j'ai remarquées (ce sont peut-être des erreurs du moment où vous l'avez écrit).
$('.navlink').click
)return $(this).data("selected")==true
)la source
Sonne comme plus de travail que sa valeur.
1) Pourquoi ne pas avoir une seule variable JavaScript qui stocke une référence à l'élément \ jQuery actuellement sélectionné.
2) Pourquoi ne pas ajouter une classe à l'élément actuellement sélectionné. Ensuite, vous pouvez interroger le DOM pour la classe ".active" ou quelque chose.
la source