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?
Voulez-vous dire pouvez-vous les sélectionner? Si oui, alors oui:
$(":checkbox[myattr]")
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
}
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.
Cela fonctionnera:
$('#A')[0].hasAttribute('myattr');
$("input[attr]").length
pourrait être une meilleure option.
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.
$("input#A").attr("myattr") == null
if (!$("#element").attr('my_attr')){
//return false
//attribute doesn't exists
}
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') ) { ...
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+']');
}