J'ai reçu 2 expressions jQuery: p> Quelle moyenne (supposons qu'il n'y a qu'un seul A fort> et B fort> devrait donner le même résultat. P> Une fois que l'utilisateur a changé la sélection dans la liste déroulante, P> Alors pourquoi sont-ils différents? Est ma compréhension des sélecteurs de CSS incorrects? P> Démo en direct est html fort>: p> JavaScript strong>: p> sélectionner code> dans le document, car Simplicité): p>
Sélectionnez CODE>, puis recherchez toutes les «CODE> OPTION CODE> DÉMPENDANTS ATTRAIT UN ATTRACTE NAMÉ NOMMÉ
SOCIÉ CODE>.
Sélectionnez CODE>, puis recherchez l'option code> code> des descendants, puis filtrez par ceux qui ont un attribut nommé
sélectionné . li>
ul>
Comportement attendu: h2>
Comportement réel: h2>
Question: H2>
Démo en direct: H2>
ici grève> ici . P> Code source: h2>
+---------------------------+--------------+---------------------+---------+-----+
| Browser | Environment | jQuery | A | B |
+---------------------------+--------------+---------------------+---------+-----+
| Chrome 22.0.1229.94m | Win7 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Chrome 23.0.1271.64 m | Win7 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Firefox 15.0.1 | Win7 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Firefox 16.0.2 | Win7 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| IE 6 | WinXP | 1.8.2, 1.7.2, 1.6.4 | *new* | new |
| IE 9 | Win7 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Opera 12.02 | Win7 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Opera 12.10 | Win7 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Safari 5.1.7 (7534.57.2) | Win7 | 1.8.2, 1.7.2, 1.6.4 | default | new |
+---------------------------+--------------+---------------------+---------+-----+
| Chrome 22.0.1229.94 | MacOS 10.7.5 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Chrome 23.0.1271.64 | MacOS 10.7.5 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Firefox 13.0 | MacOS 10.7.5 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Firefox 14.0.1 | MacOS 10.7.5 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Firefox 16.0.2 | MacOS 10.7.5 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Opera 12.01 | MacOS 10.7.5 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Opera 12.10 | MacOS 10.7.5 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Safari 6.0.1 (7536.26.14) | MacOS 10.7.5 | 1.8.2, 1.7.2, 1.6.4 | default | new |
+---------------------------+--------------+---------------------+---------+-----+
| Chrome 21.0.1180.82 | iOS 4.3.5 | 1.8.2, 1.7.2, 1.6.4 | default | new |
| Opera 7.0.5 | iOS 4.3.5 | 1.8.2 | default | new |
| Safari | iOS 4.3.5 | 1.8.2, 1.7.2, 1.6.4 | default | new |
+---------------------------+--------------+---------------------+---------+-----+
5 Réponses :
Cela dépend de la manière dont le DOM est construit par le navigateur .. Utilisation de Vous devez utiliser P> Option [Sélectionné] [COTE] CODE> JQUERY Recherchez un élément d'option ayant l'attribut sélectionné qui dans certains cas, il n'a pas appliqué
SelectObj.children(':selected')
.filter ('[sélectionné]') CODE> FILTRES Options ayant aussi l'attribut sélectionné ... La question est pourquoi.
Lorsque vous écrivez l'option $ ("[" [Attribut] ') éléments qui ont l'attribut spécifié, avec n'importe quelle valeur. < fort> violon strong> p> [Sélectionné] code> Il recherchera l'attribut
sélectionné code> / propriété
Au lieu de cela, vous devez utiliser l'option
: sélectionné code>
Si vous avez
lisonly code> propriété et que vous codez
option [Readonly] code> Il retournera
s code>
Pour plus d'informations: a un sélecteur d'attribut [nom] p>
Votre implémentation est fausse, il n'est pas il devrait être, p> voici le violon édité: p> http://jsfiddle.net/ugxtx/6/ p> et référence : P>
Le moteur SIZZLE vérifie le voir https://github.com/jquery/sizzle/blob /master/sizzle.js#L788 P>
Ce que je n'ai pas encore compris, c'est pourquoi votre deuxième sélecteur invoque apparemment grésillement, mais le premier ne semble pas. P>
Dans tous les cas, la propriété est ce que vous devez vérifier plutôt que l'attribut, vous devez donc utiliser le sélectionné code> propriété em> d'un élément (qui contient la valeur actuelle em>) plutôt que l'attribut em> qui contient la valeur d'origine (par défaut). p>
: pseudo-sélecteur code> sélectionné et non
[sélectionné] code > p>
Dmethvin explique la différence dans Ce numéro : le problème de : sélectionné code> Parcourez le chemin JavaScript de grésillement et regardez une propriété, alors que
[sélectionné] code> passe par le chemin QuerySelectorall et regarde les attributs. (Sauf s'il y a un autre sélecteur non-QSA dans la chaîne, tels que
[sélectionné]: premier code>.)
@Mottie En effet, sauf que j'ai utilisé le débogueur et j'ai constaté que .filter ('[sélectionné]') code> n'a pas compris le code code> sélectionné (code> Sizzzle. Impair...
J'ai soumis un rapport de bogue à jQuery ici . Il est marqué comme un duplicata de Un autre rapport de bogue qui est maintenant fixe fort >. P> Pour obtenir la sélection actuelle forte>: p> Utilisez le Notez que la 2e expression est supposée plus lente em> , selon le DOC . P> parce que Pour obtenir la sélection pour jQuery 1.9 + strong>, utilisez l'une des expressions comme dans la question, c'est-à-dire p> pour jQuery 1.6 + strong>, utilisez la propriété [Sélectionné] code> correspond à tous les éléments présentant un attribut code> sélectionné code>, avec n'importe quelle valeur (références: w3c , jQuery ). P>
Pourquoi les résultats incompatibles? H2>
Toutes solutions? h2>
: sélectionné code>
sélecteur (Démo en direct ici ): p>
: sélectionné code> est une extension de jQuery et ne faisant pas partie de la spécification CSS, requêtes à l'aide de
: sélectionné code> ne peut pas tirer parti du boost de performance fourni par le Native DOM
QuerySelectorall () Code> Méthode. P>
blockquote>
défaut de la propriété code> (Démo en direct ici , références: W3Schools , Mozilla , MSDN , MSDN ): P>
$('select').find('option').filter(function() {
return $(this).prop('defaultSelected');
});
Votre compréhension des sélecteurs CSS semble sonore. Cependant, JQuery ne fondte pas toujours les sélecteurs sur le balisage source. Cela est particulièrement vrai, j'ai trouvé, pour les sélecteurs d'attributs avec des valeurs pouvant changer. Aucune idée pourquoi JQuery traiterait ces problèmes de manière incohérente, cependant.
Note latérale: Utilisation de
Option: sélectionnée code> au lieu de
Option [Sélectionné] code> pour le
#Resulta code> produira la même sortie que
#Resultb < / code>.
@ SP00M: Je commence à vraiment vraiment détester le grésillement beaucoup.
Il y avait un problème avec ces sélecteurs ne renvoyant pas la même valeur dans les versions JQuery plus âgées que 1.7 - voir cette Rapport de bogue < / a>