Comment faites-vous des jQuery hasClass
avec du JavaScript ordinaire? Par exemple,
<body class="foo thatClass bar">
Quelle est la façon JavaScript de demander si <body>
oui thatClass
?
javascript
dom
Kyle
la source
la source
class
propriété (qui, dans le cas de plusieurs classes, aura plusieurs noms de classe dans un ordre aléatoire séparés par un espace) et vérifier si votre nom de classe s'y trouve. Pas terriblement difficile, mais toujours terriblement gênant si ce n'est à des fins d'apprentissage :)Réponses:
Vous pouvez vérifier si des
element.className
correspondances/\bthatClass\b/
.\b
correspond à une coupure de mot.Ou, vous pouvez utiliser la propre implémentation de jQuery:
Pour répondre à votre question plus générale, vous pouvez consulter le code source de jQuery sur github ou la source
hasClass
spécifiquement dans ce visualiseur de source .la source
rclass
qui est réellement;))\b
correspondrait pas à "thatClass-anotherClass"?/[\t\r\n\f]/g
. Il est également bon de mentionner que cela/\bclass\b/
peut échouer pour les noms de classe avec le-
signe moins (à part que cela fonctionne bien), c'est pourquoi l'implémentation de jQuery est meilleure et plus fiable. Par exemple:/\bbig\b/.test('big-text')
retourne vrai au lieu de faux attendu.Utilisez simplement
classList.contains()
:Autres utilisations de
classList
:Prise en charge du navigateur:
classList
Prise en charge du navigateurla source
.classList
sous forme de chaîne, mais il ne reconnaîtra pas les méthodes les plus modernes telles que.classList.contains()
La doublure la plus efficace
thisClass
sur un élément qui aclass="thisClass-suffix"
.la source
L'attribut qui stocke les classes en cours d'utilisation est
className
.Vous pouvez donc dire:
Si vous voulez un emplacement qui vous montre comment jQuery fait tout, je suggère:
http://code.jquery.com/jquery-1.5.js
la source
match
attribut est à nouveau utile! Est-ce que jQuery fait vraiment plus que ce qui est possible en JavaScript?! Sinon, jQuery n'est qu'un poids inutile de raccourcis.myclass-something
, comme\b
correspond au trait d'union.la source
Fonction hasClass:
Fonction addClass:
Fonction removeClass:
la source
J'utilise une solution simple / minimale, une ligne, un navigateur croisé et fonctionne également avec les navigateurs hérités:
Cette méthode est excellente car elle ne nécessite pas de polyfills et si vous les utilisez pour
classList
c'est beaucoup mieux en termes de performances. Au moins pour moi.Mise à jour: j'ai fait un minuscule polyfill qui est une solution polyvalente que j'utilise maintenant:
Pour l'autre manipulation de classe, voir le fichier complet ici .
la source
notmyClassHere
?!/myClass/.test(document.body.className)
Notez également le!
symbole.thisIsmyClassHere
.une bonne solution pour cela est de travailler avec classList et contains.
je l'ai fait comme ça:
Vous avez donc besoin de votre élément et vérifiez la liste des classes. Si l'une des classes est la même que celle que vous recherchez, elle retournera true sinon elle retournera false!
la source
Utilisez quelque chose comme:
la source
myHTMLSelector.classList.indexOf('the-class')
? Tu ne veux pas aussi>=0
à la fin?[].indexOf
ifclassList
a unecontains
méthode?myHTMLSelector.classList.indexOf('the-class')
renvoie l'erreur qui,myHTMLSelector.classList.indexOf is not a function
carmyHTMLSelector.classList
n'est pas un tableau. Mais je suppose que lors de l'appel en utilisantArray.prototype
une conversion, cela se produit. Cela peut prendre en charge un navigateur plus ancien, maiscontains
a un très bon support.la source
Cette fonction 'hasClass' fonctionne dans IE8 +, FireFox et Chrome:
la source
Eh bien, toutes les réponses ci-dessus sont plutôt bonnes, mais voici une petite fonction simple que j'ai préparée. Cela fonctionne plutôt bien.
la source
classList
a unecontains
méthode?Que pensez-vous de cette approche?
https://jsfiddle.net/5sv30bhe/
la source
class="nothatClassIsnt"
?Voici le moyen le plus simple:
la source