9
votes

JQuery: sélectionnez tous les éléments "Sélectionner" avec certains vals ()

Est-ce que quelqu'un connaît un moyen simple, en utilisant jQuery, pour sélectionner tous les éléments dont l'attribut val () donne une certaine valeur?

J'essaie de faire une certaine logique de validation et j'aimerais simplement sélectionner tous ces éléments avec un seul sélecteur, puis appliquer une classe d'alerte à chacun de leurs parents. Ceci, je sais comment faire une fois que j'ai sélectionné tous les éléments, mais je n'ai pas vu de sélecteur qui gère ce cas.

am je vais devoir choisir tous les éléments ne dispose pas d'une attribut . Il n'y a pas une valeur unique d'une boîte de sélection: il ne peut y avoir aucune option sélectionnée (il ne devrait normalement y avoir normalement pas d'être, mais il peut y avoir au moins IE), et dans un , il peut y avoir un nombre quelconque d'options sélectionnées.

Même entrée [valeur = x] ne fonctionne pas, même si avoir une valeur attribut. Eh bien, ça marche, ça ne fait pas ce que tu penses. Il récupère la valeur de la valeur valeur = "..." de l'attribut html, pas la valeur actuelle que vous avez entrée dans le formulaire. La valeur = "..." correspond à la propriété defaultvalue et non valeur .

< Code> option [valeur = x] [Sélectionné] ne fonctionne pas car il vérifie l'attribut

sauf en IE, qui obtient la valeur , sélectionné (code> Form formulaire) est incorrect.

Sauf (à nouveau): l'exemple de Tesserex peut sembler travailler, et la raison en est que c'est qu'il utilise un sélecteur de jQuery non standard, : a . Cela provoque l'échec de l'échec de QuerySelectorallectoral Native QuerySelectorall et, par conséquent, JQuery redevient à la fois (JavaScript, Selector Selector. Ce moteur sélecteur a un bug où il confond des propriétés pour les attributs, permettant [valeur = x] pour faire ce que vous attendiez, et ne pas échouer comme si cela devrait! (Mise à jour: Ce n'est probablement plus le cas dans les versions de JQuery plus récentes.)

Résumé: Former le champ Vérification de l'état et Sélecteurs Ne mélangez pas. Outre ces problèmes, vous devez également vous soucier des problèmes d'échappement - par exemple, que si la valeur que vous souhaitez tester contre contient des citations ou des crochets?

Ainsi, oui, vous devriez le vérifier manuellement. Par exemple, à l'aide d'un filtre: xxx

(il y a une valeur propriété dans html5 et prise en charge par les navigateurs modernes, que Lorsque vous lisez, il vous donne la valeur du premier


4 commentaires

Wow, alors ma réponse fonctionne à cause d'un bogue dans l'interprétation de "valeur"? Intéressant.


Pas vraiment intéressant ... plus, confusion inficielle imo! Cette zone du DOM est en colère avec des malentendus et des bogues, dans les deux navigateurs et les applications, ce qui peut rendre cela vraiment difficile à résoudre ce qui se passe.


Cela signifie donc que cela ne devrait probablement pas fonctionner: $ ("p"). Pas (". Hidden_Control"). Rechercher ('Option: sélectionnée [valeur = "]') pour la même raison que Tesserex 'code ne devrait pas? L'alternative semble beaucoup moins élégante qui est une honte ...


@Danny: En fait, je pense que cela devrait fonctionner (au moins dans les jqueries modernes - Texte de réponse mis à jour comme la manipulation de JQuery des attributs VS Propriétés a changé). : Sélectionné est défini (par jQuery - ce n'est pas un pseudo-classe CSS standard) comme fonctionnant en fonction de la sélection actuelle, pas la valeur d'attribut (comme [sélectionné] .



0
votes

Vous pouvez créer un événement de changement qui met la valeur dans un attribut personnalisé sur l'élément Select chaque fois que la valeur change. Vous pouvez ensuite utiliser un simple sélecteur pour trouver tous les éléments sélectionnés qui ont cette valeur. Par exemple: xxx

et ensuite vous pouvez le faire: xxx

$ matchs aura toutes vos sélectionnées correspondantes.

C'est beaucoup plus facile que d'avoir à itération à travers des éléments. N'oubliez pas de définir la valeur sélectionnée à la valeur initiale lors du rendu de la page afin de ne pas avoir besoin de déclencher un événement de changement pour chaque SELECT afin que la valeur de sélection est définie.


0 commentaires