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.