jQuery hasAttr vérifie s'il y a un attribut sur un élément [dupliquer]

Double Possible:

Vérifier l'existence d'un attribut avec JQuery

Comment vérifier s'il y a un attribut sur un élément dans jQuery? Similaire à hasClass , mais avec attr ?

par exemple,

if ($(this).hasAttr("name")) {
    // ...
}
614
demandé sur Community 2009-08-23 12:38:52

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) {
    // ...
}
957
répondu strager 2014-06-18 11:12:38

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é.

568
répondu Domenic 2011-01-11 19:59:17

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>
134
répondu karim79 2009-08-23 09:11:48

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>
80
répondu Tristan Warner-Smith 2012-04-17 13:38:59

la Fin de la partie, mais... pourquoi pas this.hasAttribute("name") ?

Consultez Ce

69
répondu Domenic 2013-02-07 14:37:17

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.

15
répondu JamesM-SiteGen 2010-06-27 18:52:37
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.

7
répondu rlemon 2011-09-23 15:03:28

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.

5
répondu user398341 2010-08-11 13:37:35

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é.

5
répondu bmarti44 2013-02-08 14:34:35