Question jQuery hasAttr vérifiant s'il existe un attribut sur un élément [duplicate]


Dupliquer possible:
Vérifier l'existence d'un attribut avec JQuery 

Comment vérifiez-vous s'il y a un attribut sur un élément dans jQuery? Semblable à hasClass, mais avec attr?

Par exemple,

if ($(this).hasAttr("name")) {
    // ...
}

601
2017-08-23 08:38


origine


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) {
    // ...
}

939
2017-08-23 08:42



Que diriez-vous juste $(this).is("[name]")?

le [attr] la syntaxe est le sélecteur CSS pour un élément avec un attribut attr, et .is() vérifie si l'élément auquel il est appelé correspond au sélecteur CSS donné.


564
2018-01-11 19:59



Si vous allez vérifier l'existence des attributs fréquemment, je suggère de créer un hasAttr fonction, à utiliser comme vous l'avez supposé 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>

133
2017-08-23 09:11



Tu es si proche que c'est fou.

if($(this).attr("name"))

Il n'y a pas de hasAttr mais en tapant un attribut par son nom, il retournera simplement undefined s'il n'existe pas.

C'est pourquoi les travaux ci-dessous. Si vous supprimez l'attribut name de #heading, la seconde alerte sera déclenchée.

Mettre à jour: Selon les commentaires, le ci-dessous sera SEULEMENT travailler si l'attribut est présent ET est mis à quelque chose 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>

79
2017-08-23 08:42



Tard à la fête, mais ... pourquoi pas juste this.hasAttribute("name")?

Référer Ce


68
2018-01-03 22:59



La meilleure façon de le faire serait avec filter():

$("nav>ul>li>a").filter("[data-page-id]");

Ce serait quand même bien d'avoir .hasAttr (), mais comme il n'existe pas, il y en a un.


15
2018-05-25 08:23



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);      
};

Je suis venu un croisé ceci en écrivant ma propre fonction pour faire la même chose ... Je pensais que je partagerais au cas où quelqu'un d'autre trébucherait ici. J'ai ajouté null parce que getAttribute () renverra null si l'attribut n'existe pas.

Cette méthode vous permettra de vérifier les objets jQuery et les objets javascript réguliers.


6
2017-09-23 15:03