181 votes

jQuery : à l’aide de ' commence par ' sélecteur sur les noms de classe individuelle

Si j'ai le texte suivant:

<div class="apple-monkey"></div>
<div class="apple-horse"></div>
<div class="cow-apple-brick"></div>

Je peux utiliser le sélecteur suivant pour trouver les deux premiers DIVs:

$("div[class^='apple-']")

Cependant, si j'ai ceci:

<div class="some-other-class apple-monkey"></div>
<div class="apple-horse"></div>
<div class="cow-apple-brick"></div>

Il ne trouvera la deuxième DIV, depuis le premier div de classe est retourné comme une chaîne de caractères (je pense) et n'est pas réellement commencer par "apple", mais plutôt " certains-'

Un moyen de contourner cela est de ne pas utiliser démarre, mais au lieu de cela contient:

$("div[class*='apple-']")

Le problème c'est qu'il sera également sélectionner le 3ème DIV dans mon exemple.

Question: Via jQuery, quelle est la bonne façon d'utiliser le prédicat des sélecteurs individuels des noms de classe, plutôt que de l'ensemble de l'attribut de classe comme une chaîne de caractères? Est-ce juste une question de s'emparer de la CLASSE, puis de le diviser en un tableau et puis en parcourant chaque individu avec la regex? Ou est-il plus élégant/moins verbeux solution?

346voto

Josh Stodola Points 42410

Classes qui commencent par « apple- » plus les classes qui contiennent « pomme- »

16voto

Parrots Points 10968

Je recommanderais de faire « Pomme » c’est une classe propre. Vous devez éviter les mises en chantier-avec/extrémités-avec si vous le pouvez parce que la possibilité de sélectionner à l’aide de `` serait beaucoup plus rapide. C’est la solution la plus élégante. N’hésitez pas à diviser les choses en classes distinctes, si elle rend la tâche plus simple/rapide.

2voto

Gumbo Points 279147

Essaye ça:

 $("div[class]").filter(function() {
    var classNames = this.className.split(/\s+/);
    for (var i=0; i<classNames.length; ++i) {
        if (classNames[i].substr(0, 6) === "apple-") {
            return true;
        }
    }
    return false;
})
 

1voto

Dave.Sol Points 163

Qu’en est-il du jQuery regex selector plugin http://james.padolsey.com/javascript/regex-selector-for-jquery/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X