jQuery: Est-il possible de sélectionner des éléments avec une seule classe parmi les éléments qui, potentiellement, jusqu'à 3 classes?
Par exemple, dire que j'ai les suivantes:
<span class="a b c">Has class a, b, and c</span>
<span class="a">Has class a</span>
<span class="b c">Has class b and c</span>
<span class="a c">Has class a and c</span>
<span class="a c">Has class a and c</span>
<span class="a">Has class a</span>
Maintenant, supposons que je veux sélectionner tous les éléments qui ont uniquement de classe.
Sens que la deuxième et dernière span
s serait d'être sélectionné.
Est-il un moyen simple de faire cela?
Vous devez vous connecter pour publier un commentaire.
Cela va sélectionner tous les éléments avec la classe
a
qui n'ont pas deb
ouc
. Cependant, ils pourraient encore avoir de la classed
,e
, etc. L'utilisation de Phil réponse si vous ne souhaitez que des éléments avec aucune autre classe quea
.(Voir ci-dessous pour expliquer pourquoi vous ne pourriez pas vouloir faire exactement ce qui est demandé dans la question)
Vous pouvez utiliser le
[class="a"]
"attribut est égal à sélecteur", mais il est fragile:Le problème est que si vous avez n'importe quel espace dans votre classe, attribut, il va se casser. Voir ce violon: http://jsfiddle.net/c7DP7/
Vous pouvez résoudre ce problème en faisant une requête de base sur ces éléments à l'aide d'un sélecteur de classe normale, puis filtrer tout en vérifiant seulement
a
est réglé (et le parage des espaces dans le second filtre). Voir ce violon: http://jsfiddle.net/uD48E/1/La question ressemble, c'est d'essayer de faire plus de "l'avenir" à l'épreuve du code, mais que l'approche spécifique est de plus en plus fragiles. Rejetant toutes les classes qui ne sont pas liées à la classe courante, vous êtes de filtrage pour peut casser des choses, pour des raisons non liées à la classe
a
(comme une autre classed
oue
qui est ajouté plus tard). Ceci est important si le code HTML que vous faites une demande à votre jQuery pour peut être modifié dans le futur.Une meilleure façon de le faire est de filtrer uniquement les classes qui ont un impact le sens de la classe
a
. Permettant pour ce type de flexibilité est réellement ce qui rend votre code plus à l'avenir. Voir maxedison réponse pour la meilleure façon de le faire.Je suppose que si vous voulais pour ce faire, il vous suffit de faire:
span
dans le sélecteur comme Phil a ici. Si il y a des divs ou les dhceu qui pourraient avoir la classe souhaitée, et vous souhaitez sélectionner ceux qui,$("[class='a']")
de le faire.Une autre méthode consiste à supprimer les classes et ensuite de vérifier si toutes les classes restent. Si non, exécuter la fonction:
JS Fiddle