52 votes

Comment puis-je obtenir les éléments sans attribut particulier par jQuery

Je sais comment obtenir des éléments avec un attribut particulier:

 $("#para [attr_all]")
 

Mais comment puis-je obtenir les éléments SANS un attribut particulier? J'essaie

  $("#para :not([attr_all])")
 

Mais ça ne marche pas. Quelle est la bonne façon de faire cela?

Laissez-moi vous donner un exemple:

 <div id="para">
    <input name="fname" optional="1">
    <input name="lname">
    <input name="email">
</div>
 

jQuery:

 $("#para [optional]") // give me the fname element  
$("#para :not([optional])") //give me the fname, lname, email (fname should not appear here)  
 

122voto

Frank DeRosa Points 1286

Si votre exemple de code est le code exact que vous utilisez, je pense que le problème est un espace errant.

 $("#para :not([attr_all])")
 

devrait être

 $("#para:not([attr_all])")
 

Si vous y laissez une place, les descendants de #para .

21voto

Pim Jager Points 20018

La première chose qui me vient à l’esprit (peut-être sous optimale)

     $('p').filter(function(){
         return !$(this).attr('attr_all');
    });
 

Cependant, p: not ([attr_all]) devrait fonctionner, alors je pense qu'il se passe autre chose.

7voto

bittersweetryan Points 1670

Un moyen plus rapide de le faire est d'abord de rendre tous les éléments avec l'ID para (qui n'est pas valide HTML si il n'y a plus d'un, envisagez l'utilisation d'une classe à la place) et utiliser le filtre (ou selon la façon dont le code HTML est construit) méthode pour obtenir uniquement les éléments sans l'attribut de la sorte:

$('#para').filter(':not([attr_all])');

Ce faisant, vous rencontrez jQuery faire beaucoup moins de travail parce que vous êtes seulement en boucle par l'intermédiaire d'un petit sous-ensemble d'éléments pour obtenir ces sans l'attribut. De le faire avec un seul sélecteur de déclaration, par exemple, $("#para :not([attr_all])"), sera la cause de jQuery pour obtenir tous les éléments sans l'attribut, puis les filtrer pour ceux avec l'ID de par.

6voto

chaos Points 69029

Essayez $("#para [attr!=val]") .

Votre :not devrait vraiment fonctionner, ce qui me laisse supposer qu'il se passe autre chose.

Modifier ( machine ): pour une liste complète des sélecteurs d'attributs, voir ce lien vers la documentation relative aux sélecteurs 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