web-dev-qa-db-fra.com

Sélectionner des éléments par attribut

J'ai une collection de cases à cocher avec les identifiants générés et certains d'entre eux ont un attribut supplémentaire. Est-il possible d'utiliser JQuery pour vérifier si un élément a un attribut spécifique? Par exemple, puis-je vérifier si l'élément suivant a l'attribut "myattr"? La valeur de l'attribut peut varier.

<input type="checkbox" id="A" myattr="val_attr">A</input>

Par exemple, comment puis-je obtenir une collection de toutes les cases à cocher ayant cet attribut sans cocher une par une? Est-ce possible?

247
Ciprian Grosu

Voulez-vous dire pouvez-vous les sélectionner? Si oui, alors oui:

$(":checkbox[myattr]")
188
cletus
if ($('#A').attr('myattr')) {
    // attribute exists
} else {
    // attribute does not exist
}

MODIFIER:

Ce qui précède tombera dans la branche else- lorsque myattr existe mais est une chaîne vide ou "0" Si cela pose un problème, vous devez explicitement tester sur undefined:

if ($('#A').attr('myattr') !== undefined) {
    // attribute exists
} else {
    // attribute does not exist
}
364
Stefan Gehrig

Je sais que la question a été posée il y a longtemps, mais j'ai trouvé que le chèque était plus clair:

if ($("#A").is('[myattr]')) {
    // attribute exists
} else {
    // attribute does not exist
}

(Tel que trouvé sur ce site ici )

La documentation sur is peut être trouvée ici

166

En JavaScript, ...

null == undefined

... renvoie true *. C'est la différence entre == et ===. De plus, le nom undefined peut être défini (ce n'est pas un mot clé comme null is), il est donc préférable de vérifier d'une autre manière. La méthode la plus fiable consiste probablement à comparer la valeur de retour de l'opérateur typeof.

typeof o == "undefined"

Néanmoins, comparer à null devrait fonctionner dans ce cas.

* En supposant que undefined est en fait non défini.

8
bambams

Cela fonctionnera:

$('#A')[0].hasAttribute('myattr');
8
powermikee

$("input[attr]").length pourrait être une meilleure option.

5
ssps

Quelques idées ont été lancées en utilisant "typeof", jQuery ".is" et ".filter", donc je pensais publier un rapide comparatif. Le typeof semble être le meilleur choix pour cela. Alors que les autres vont fonctionner, il semble y avoir une nette différence de performances lors de l’appel de la bibliothèque jq pour cet effort.

4
Daved
$("input#A").attr("myattr") == null
1
Mathias F
if (!$("#element").attr('my_attr')){
  //return false
  //attribute doesn't exists
}
1
Fury

simplement:

$('input[name*="value"]')

plus d'infos: documents officiels

1
Kambiz

J'ai créé le paquet npm avec le comportement souhaité, comme décrit ci-dessus dans la question.

Lien vers [npm] et [github]

L'utilisation est très simple. Par exemple:

<p id="test" class="test">something</p>
$("#test").hasAttr("class")

retourne vrai.

Fonctionne aussi avec camelcase.

0
Shoter

En plus de sélectionner tous les éléments avec un attribut $('[someAttribute]') ou $('input[someAttribute]'), vous pouvez également utiliser une fonction pour effectuer des contrôles booléens sur un objet, par exemple dans un gestionnaire de clics:

if(! this.hasAttribute('myattr') ) { ...

0
AaronLS

comme dans ce message , en utilisant .is et le sélecteur d'attributs [], vous pouvez facilement ajouter une fonction (ou un prototype):

function hasAttr($sel,attr) {
    return $sel.is('['+attr+']');
}
0
dhc