Je peux sélectionner (en utilisant jQuery) tous les divs dans un balisage HTML comme suit:
$('div')
Mais je veux exclure un particulier div
(disons avoir id="myid"
) de la sélection ci-dessus.
Comment puis-je faire cela en utilisant les fonctions Jquery?
javascript
jquery
jquery-selectors
siva636
la source
la source
Réponses:
Facile:
$('div').not('#myid');
L'utilisation
.not()
supprimera les éléments correspondant au sélecteur qui lui est donné de l'ensemble renvoyé par$('div')
.Vous pouvez également utiliser le
:not()
sélecteur:$('div:not(#myid)');
Les deux sélecteurs font la même chose, mais
:not()
c'est plus rapide , probablement parce que le moteur de sélection de jQuery Sizzle peut l'optimiser en un.querySelectorAll()
appel natif .la source
.not()
c'est bien, bien mieux que:not()
.$('div:not(#myid)');
(sans guillemets). @Raynos: Pourquoi?:not()
est un sélecteur CSS3. jQuery peut passer directement le sélecteur àquerySelectorAll
s'il est pris en charge ....not
et moins lisible. J'aurais dû dire ": pas de sélecteur dans jQuery":not()
. Ce sélecteur n'est pas non plus nouveau dans Selectors 4, ni n'a été modifié pour autoriser les citations. Il a cependant été modifié pour permettre des sélecteurs plus complexes. Sauf si j'ai mal compris votre commentaire ...querySelectorAll
comme le plus rapide. Ce n'est pas une référence du monde réel, mais il faut s'y attendre car il n'y a pas de surcharge de la part de jQuery interne.:not()
est en fait plus rapide, probablement parce que Sizzle sait qu'il peut l'optimiser pour l'utiliserquerySelectorAll()
var els = toArray(document.getElementsByTagName("div")); els.splice(els.indexOf(document.getElementById("someId"), 1);
Vous pouvez simplement le faire à l'ancienne. Pas besoin de jQuery avec quelque chose d'aussi simple.
Conseils de pro:
Un ensemble d'éléments dom n'est qu'un tableau, utilisez donc votre
toArray
méthode préférée sur unNodeList
.L'ajout d'éléments à un ensemble est juste
set.push.apply(set, arrOfElements);
Supprimer un élément d'un ensemble est
set.splice(set.indexOf(el), 1)
Vous ne pouvez pas facilement supprimer plusieurs éléments à la fois :(
la source
.querySelector()
ou.querySelectorAll()
avecdiv:not(#myid)
est-elle plus rapide ... Vraiment?$("div:not(#myid)")
[doc]
ou
$("div").not("#myid")
[doc]
sont les principaux moyens de sélectionner tous les identifiants sauf un
Vous pouvez voir la démo ici
la source
$("div:not(#myid)")
est peut - être plus rapide ... Vérifiez l' optimisation de sizzlejs pour cela, lorsque vous utilisez Javascript natif.querySelector()
ou.querySelectorAll()
.var elements = $('div').not('#myid');
Cela inclura tous les divs sauf celui avec l'identifiant 'myid'
la source
$('div:not(#myid)');
c'est ce dont vous avez besoin je pense.
la source
Ça devrait le faire:
$('div:not("#myid")')
la source
Vous utilisez la
.not
propriété de la bibliothèque jQuery:$('div').not('#myDiv').css('background-color', '#000000');
Voyez-le en action ici . La div #myDiv sera blanche.
la source