jQuery hasAttr vérifie s'il y a un attribut sur un élément [dupliquer]
9 réponses
var attr = $(this).attr('name');
// For some browsers, `attr` is undefined; for others,
// `attr` is false. Check for both.
if (typeof attr !== typeof undefined && attr !== false) {
// ...
}
pourquoi pas juste $(this).is("[name]")
?
la syntaxe [attr]
est le sélecteur CSS pour un élément avec un attribut attr
, et .is()
vérifie si l'élément sur lequel il est appelé correspond au sélecteur CSS donné.
si vous allez vérifier l'existence des attributs fréquemment, je suggérerais de créer une fonction hasAttr
, à utiliser comme vous avez émis l'hypothèse dans votre question:
$.fn.hasAttr = function(name) {
return this.attr(name) !== undefined;
};
$(document).ready(function() {
if($('.edit').hasAttr('id')) {
alert('true');
} else {
alert('false');
}
});
<div class="edit" id="div_1">Test field</div>
tu es si proche que c'est fou.
if($(this).attr("name"))
il n'y a pas de hasAttr mais frapper un attribut par son nom ne fera que revenir indéfini s'il n'existe pas.
C'est pourquoi le dessous fonctionne. Si vous supprimez l'attribut name de #heading, la deuxième alerte s'enclenchera.
mise à Jour: Que par les commentaires, ci-dessous SEULEMENT travail si l'attribut est présent ET est défini à quelque chose non pas si l'attribut est là mais vide
<script type="text/javascript">
$(document).ready(function()
{
if ($("#heading").attr("name"))
alert('Look, this is showing because it\'s not undefined');
else
alert('This would be called if it were undefined or is there but empty');
});
</script>
<h1 id="heading" name="bob">Welcome!</h1>
la meilleure façon de faire cela serait avec filter()
:
$("nav>ul>li>a").filter("[data-page-id]");
ce serait toujours bien d'avoir .hasAttr(), mais comme il n'existe pas, il n'y a de cette façon.
Object.prototype.hasAttr = function(attr) {
if(this.attr) {
var _attr = this.attr(attr);
} else {
var _attr = this.getAttribute(attr);
}
return (typeof _attr !== "undefined" && _attr !== false && _attr !== null);
};
j'ai traversé ceci en écrivant ma propre fonction pour faire la même chose... Je pensais partager au cas où quelqu'un d'autre trébucherait ici. J'ai ajouté null parce que getAttribute () retournera null si l'attribut n'existe pas.
cette méthode vous permettra de vérifier les objets jQuery et les objets javascript réguliers.
vous pouvez également l'utiliser avec des attributs tels que disabled=" disabled " sur les champs de formulaire etc. comme ceci:
$("#change_password").click(function() {
var target = $(this).attr("rel");
if($("#" + target).attr("disabled")) {
$("#" + target).attr("disabled", false);
} else {
$("#" + target).attr("disabled", true);
}
});
l'attribut " rel " stocke l'id du champ d'entrée cible.
j'ai écrit un plugin hasAttr() pour jquery qui fera tout cela très simplement, exactement comme L'OP L'a demandé. En savoir plus ici
EDIT: Mon plugin a été supprimé dans le grand plugins.jquery.com suppression de base de données catastrophe de 2010. Vous pouvez regarder ici pour quelques informations sur l'ajout vous-même, et pourquoi il n'a pas été ajouté.