jQuery: sélectionnez les attributs de données qui ne sont pas vides?


Réponses:


76

essayer

$(':not([data-go-to=""])')

METTRE À JOUR:

Pour ne pas induire personne en erreur, cette réponse fonctionnera dans les anciennes versions de jQuery mais n'est pas à l'épreuve du temps. Étant donné que les réponses de @gmo et @ siva semblent fonctionner avec les versions ultérieures, je m'en remets à leurs réponses (et je vous encourage à voter pour) ... et j'espère bien sûr que vous passerez une journée fantastique.


merci, cela a très bien fonctionné! Je voulais sélectionner uniquement des éléments d'image, j'ai donc ajouté $ (': not (img [data-go-to == ""]')
msanjay

2
Cela ne sélectionne-t-il pas tous les éléments qui n'ont pas d'attribut «data-to-go» vide? Quand le demandeur veut que tous les éléments avec cet attribut ne soient pas vides? (comme la réponse de Siva Charan se résout)
rodnaph

pas vraiment besoin de guillemets doubles non plus ... comme dans $('element:not([attribute=])'); // gets all of <element attribute="">ou$(':not([attribute=])'); // gets all of <* attribute="">
Anthony Hatzopoulos

2
Cela obtient tous les éléments pour moi, y compris celui qui a l'attribut de données que je recherche
Devil's Advocate

Cela ne semble pas fonctionner dans Safari mais le $('[data-go-to!=""]:[data-go-to]')fait.
Dan

183

Juste comme référence supplémentaire, et une mise à jour (mai'14) (août'15) (sep'16) (avr'17) (mar'18) (mar'19) ( mai'20 ) ...
Réponse qui fonctionne avec:

Chaînes vides:

Si le doit exister et pourrait avoir une valeur (ou aucune valeur du tout)attr

    jQuery("[href]");

Attributs manquants:

Si pourrait exister et s'il existe, doit avoir une certaine valeur attr

    jQuery("[href!='']");

Ou les deux:

Si doit exister et doit avoir une certaine valeur ... attr

    jQuery("[href!=''][href]");

PS : plus de combinaisons sont possibles ...


Vérifiez ce test dans jsFiddle pour des exemples:


Ou ici dans SO avec cet extrait de code .

* L'extrait de code exécute jQuery v2.1.1


6
Ça y est. Donnez votre avis sur cet utilisateur ici. les autres réponses plus anciennes ne fonctionnent pas pour moi. J'ai utilisé le troisième exemple.
Valamas

Appuyé @ Valamas-AUS
Adam Waite

Edit: Ajout d'un extrait de code SO, afin que vous puissiez le tester ici.
gmo

C'est celui qui fonctionne. $(':not([data-go-to=""])')ne fonctionne plus
Matthieu Charbonnier

1
Merci de garder la réponse à jour
Anthony C

19
$('[data-go-to!=""]:[data-go-to]').each(function() {
    // Do Your Stuff
});​

6
Celui-ci fonctionne pour les chaînes vides et les attributs manquants, parfait
adamJLev

4
à partir de mai'14 ne fonctionne pas, donne une Unrecognized Expressionerreur.
coding_idiot

7

A 'data-attributename' et sa valeur n'est pas vide:

$('[data-attributename]:not([data-attributename=""])')

A "data-attributename" vide ou non:

$('[data-attributename]')

Exemple de JS Fiddle


1
C'est la seule réponse qui fonctionne encore pour moi en juin 2015.
AlexioVay




2
$('[data-go-to]').filter(function() {
    return $(this).data('go-to')!="";
});

L' utilisation :not, .not(), :emptyetc ne vérifie si l'élément lui - même est vide, pas l'attribut de données. Pour cela, vous devrez filtrer en fonction de la valeur des attributs de données.

VIOLON


1

Cela fonctionne pour moi

$('[attributename]').filter('[attributename!=""]')

Ce sont cependant deux itérations.
Jens


0

Cela fonctionne pour moi:

$('.data .title td[data-field!=""]')
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.