Existe-t-il un moyen dans jQuery de parcourir ou d'assigner à un tableau toutes les classes affectées à un élément?
ex.
<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>
Je vais chercher une classe "spéciale" comme dans "dolor_spec" ci-dessus. Je sais que je pourrais utiliser hasClass () mais le nom de classe réel n'est pas nécessairement connu à l'époque.
javascript
jquery
html
Buggabill
la source
la source
Réponses:
Vous pouvez utiliser
document.getElementById('divId').className.split(/\s+/);
pour obtenir un tableau de noms de classe.Ensuite, vous pouvez parcourir et trouver celui que vous voulez.
jQuery ne vous aide pas vraiment ici ...
la source
$.fn.classList = function() {return this[0].className.split(/\s+/);};
if ($.inArray("someclass",classList)>=0) { /* hasClass someclass*/ }
Pourquoi personne n'a simplement énuméré.
EDIT: Comme le souligne @MarkAmery, vous ne pouvez pas simplement
.split(' ')
parce que les noms de classe peuvent être séparés par n'importe quel type d'espace.la source
$('<div class="foo bar baz">').attr("class").split(' ')
dans la console de votre navigateur (il y a un caractère de tabulation dedans); vous obtiendrez["foo", "bar baz"]
au lieu de la liste de classe correcte de["foo", "bar", "baz"]
.class="foo <lots of spaces here> bar"
, vous vous retrouveriez avec un tableau avec des éléments de chaîne vides.Sur les navigateurs compatibles, vous pouvez utiliser la
classList
propriété des éléments DOM .Il s'agit d'un objet de type tableau répertoriant toutes les classes de l'élément.
Si vous devez prendre en charge les anciennes versions de navigateur qui ne prennent pas en charge la
classList
propriété, la page MDN liée comprend également un shim pour celui-ci - bien que même le shim ne fonctionne pas sur les versions d'Internet Explorer inférieures à IE 8.la source
.classList
n'est pas un vrai tableau, et des méthodes.indexOf(⋯)
qui ne fonctionnent pas dessus. Ce n'est qu'un «objet de type tableau», alors que.className.split(/\s+/).indexOf(⋯)
(d'après la réponse acceptée) fonctionne.Array
utilisant[...iterable]
ouArray.from(iterable)
Voici un plugin jQuery qui renverra un tableau de toutes les classes des éléments correspondants
Utilisez-le comme
Dans votre cas retourne
Vous pouvez également passer une fonction à la méthode à appeler sur chaque classe
Voici un jsFiddle que j'ai mis en place pour démontrer et tester http://jsfiddle.net/GD8Qn/8/
Javascript réduit
la source
Vous devriez essayer celui-ci:
Il retourne un tableau de toutes les classes actuelles de l'élément.
la source
.classList
la solution est simple - il vous suffit de faire attention aux incohérences et / ou au manque de prise en charge du navigateur..classList
cela fonctionne assez bien dans les navigateurs modernesclassList
propriété ne fonctionne pas sur IE 10/11 pour les éléments SVG (bien qu'elle fonctionne pour les éléments HTML). Voir developer.mozilla.org/en-US/docs/Web/API/Element/classListla source
Mise à jour:
Comme @Ryan Leonard l'a souligné correctement, ma réponse ne résout pas vraiment le point que j'ai fait moi-même ... Vous devez à la fois couper et supprimer les espaces doubles avec (par exemple) string.replace (/ + / g, "") .. Ou vous pouvez diviser el.className puis supprimer les valeurs vides avec (par exemple) arr.filter (Boolean).
ou plus moderne
Vieux:
Avec toutes les réponses données, vous ne devez jamais oublier d'utiliser .trim () (ou $ .trim ())
Parce que les classes sont ajoutées et supprimées, il peut arriver qu'il y ait plusieurs espaces entre la chaîne de classe .. par exemple 'class1 class2 class3' ..
Cela deviendrait ['class1', 'class2', '', '', '', 'class3'] ..
Lorsque vous utilisez le découpage, tous les espaces multiples sont supprimés.
la source
.classList
c'est une approche beaucoup plus propre!la source
.map
; utilisez.each
si vous n'avez pas besoin de.map
la valeur de retour de. Le fractionnement sur les espaces plutôt que sur les espaces blancs est également cassé - voir mon commentaire sur stackoverflow.com/a/10159062/1709587 . Même si aucun de ces points n'était vrai, cela n'ajoute rien de nouveau à la page. -1!Cela pourrait-il aussi vous aider? J'ai utilisé cette fonction pour obtenir des classes d'éléments childern ..
Dans votre cas, vous voulez que la classe doler_ipsum u puisse faire comme ça maintenant
calsses[2];
.la source
Merci pour cela - J'avais un problème similaire, car j'essaie de relier par programme les objets aux noms de classe hiérarchiques, même si ces noms ne sont pas nécessairement connus de mon script.
Dans mon script, je veux qu'une
<a>
balise active / désactive le texte d'aide en donnant la<a>
balise[some_class]
plus la classe detoggle
, puis en donnant à son texte d'aide la classe de[some_class]_toggle
. Ce code trouve avec succès les éléments associés à l'aide de jQuery:la source
Essaye ça. Cela vous donnera les noms de toutes les classes de tous les éléments du document.
});
Voici l'exemple de travail: https://jsfiddle.net/raju_sumit/2xu1ujoy/3/
la source
J'ai eu un problème similaire, pour un élément de type image. J'avais besoin de vérifier si l'élément était d'une certaine classe. J'ai d'abord essayé avec:
mais j'ai obtenu une belle "cette fonction n'est pas disponible pour cet élément".
Ensuite, j'ai inspecté mon élément sur l'explorateur DOM et j'ai vu un très bel attribut que je pouvais utiliser: className. Il contenait les noms de toutes les classes de mon élément séparés par des espaces vides.
Une fois que vous obtenez cela, divisez simplement la chaîne comme d'habitude.
Dans mon cas, cela a fonctionné:
Je suppose que cela fonctionnerait avec d'autres types d'éléments (outre img).
J'espère que cela aide.
la source
javascript fournit un attribut classList pour un élément de noeud dans dom. Simplement en utilisant
retournera un objet de forme
L'objet a des fonctions comme contient, ajouter, supprimer que vous pouvez utiliser
la source
Un peu tard, mais l'utilisation de la fonction extend () vous permet d'appeler "hasClass ()" sur n'importe quel élément, par exemple:
var hasClass = $('#divId').hasClass('someClass');
la source
La question est de savoir ce que Jquery est conçu pour faire.
Et pourquoi personne n'a donné .find () comme réponse?
Il existe également classList pour les navigateurs non IE:
la source
Voilà, juste ajusté la réponse de readsquare pour retourner un tableau de toutes les classes:
Passez un élément jQuery à la fonction, pour qu'un exemple d'appel soit:
la source
$(elem).attr('class').split(/\s+/)
fait cela. Je me trompe peut-être, mais je ne vois aucune raison de parcourir une collection, de copier le contenu dans une nouvelle collection et de renvoyer cette nouvelle collection.Je sais que c'est une vieille question mais quand même.
Si vous souhaitez manipuler l'élément
Si vous voulez vérifier si l'élément a une classe
si plusieurs classes
la source