J'ai le scénario suivant:
var el = 'li';
et il y a 5 <li>
sur la page chacun avec un data-slide=number
attribut (le nombre étant 1,2,3,4,5 respectivement) .
Je dois maintenant trouver le numéro de diapositive actuellement actif qui est mappé var current = $('ul').data(current);
et mis à jour à chaque changement de diapositive.
Jusqu'à présent, mes essais ont échoué, essayant de construire le sélecteur qui correspondrait à la diapositive actuelle:
$('ul').find(el+[data-slide=+current+]);
ne correspond / ne renvoie rien…
La raison pour laquelle je ne peux pas coder en dur la li
partie est qu'il s'agit d'une variable accessible à l'utilisateur qui peut être changée en un élément différent si nécessaire, donc ce n'est pas toujours un li
.
Des idées sur ce qui me manque?
.find(el+[data-slide=+current+]);
est le code que vous écrivez? il semble que vous avez manqué quelques citations à"[data-slide]"
$('*[data-slide]')
vous pouvez l'utiliser avec par exemple$('*[data-slide]').each( function() { ... });
Réponses:
Vous devez injecter la valeur de
current
dans un sélecteur d' égalité d'attribut :Pour les environnements JavaScript plus anciens ( ES5 et versions antérieures):
la source
$("ul").find(el + "[data-slide='" + current +"']");
.au cas où vous ne voudriez pas taper tout cela, voici un moyen plus court de rechercher par attribut de données:
Pour info: http://james.padolsey.com/javascript/a-better-data-selector-for-jquery/
la source
<ul><li data-slide="item"></li></ul>
le sélecteur de cette réponse retournera indéfini de sorte qu'il ne fonctionne pas compte tenu du scénario de l'utilisateur. Cette réponse fonctionnera pour la structure<ul data-slide="item"><li></li></ul>
Bien que je comprenne pourquoi sa popularité en raison de sa brièveté, c'est techniquement une réponse incorrecte. jsfiddle.net/py5p2abL/1[0]
pour accéder au premier élément trouvé..find("[data-attrib='value']")
n'a pas fonctionné. Je ne sais pas si les valeurs étaient des attributs de données qui ont été ajoutés par jQuery ou non ...$.find
spécifiquement les descendants de cet élément, mais l'utilisation de la syntaxe de filtre dans la chaîne de sélection filtrera simplement les résultats.Lors de la recherche avec [data-x = ...], attention, cela ne fonctionne pas avec le setter jQuery.data (..) :
Vous pouvez utiliser ceci à la place:
la source
$.fn.filterByData
est brillant; cependant, c'est un avertissement pour les copieurs là-bas ... il vous suffit$('<b>').filterByData('x', 1)
de trouver des<b>
balises avecdata-x="1"
. si vous copiez-collez la.data(x, 1)
portion ... vous mettrez votredata-x
"1" avant de filtrer.J'ai amélioré l'extension filterByData de psycho brm à jQuery.
Lorsque l'ancienne extension recherchait une paire clé-valeur, cette extension vous permet en outre de rechercher la présence d'un attribut de données, quelle que soit sa valeur.
Usage:
Afficher l'extrait de code
Ou le violon: http://jsfiddle.net/PTqmE/46/
la source
Sans JQuery, ES6
Je sais que la question concerne JQuery, mais les lecteurs voudront peut-être une méthode JS pure.
la source
J'ai rencontré le même problème lors de la récupération d'éléments à l'aide de jQuery et de l'attribut data- *.
donc pour votre référence le code le plus court est ici:
Voici mon code HTML:
Voici mon sélecteur jQuery:
la source
J'espère que cela fonctionnera mieux
Merci
la source
Ce sélecteur
$("ul [data-slide='" + current +"']");
fonctionnera pour la structure suivante:Bien que cela
$("ul[data-slide='" + current +"']");
fonctionne pour:<ul data-slide="item"><li></li></ul>
la source
Pour revenir à sa question initiale, sur la façon de faire fonctionner cela sans connaître à l'avance le type d'élément, voici ce qui suit:
la source