790 Stimmen

jQuery hasAttr prüft, ob es ein Attribut auf einem Element gibt

Wie prüft man, ob es ein Attribut auf ein Element in jQuery gibt? Ähnlich wie bei hasClass sondern mit attr ?

Zum Beispiel,

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

14 Stimmen

Quickie: if( $(this).is('[ATTRIBUTE_NAME]') ) { /* ... */ } ÜBRIGENS: dies ist kein Duplikat dieser Frage mehr, es ist nur eine ähnliche Frage zu einem anderen Problem, das verlinkte Duplikat heißt jetzt "Elemente nach Attribut auswählen"

1240voto

strager Punkte 86191
var attr = $(this).attr('name');

// For some browsers, `attr` is undefined; for others,
// `attr` is false.  Check for both.
if (typeof attr !== 'undefined' && attr !== false) {
    // ...
}

28 Stimmen

Es wäre wahrscheinlich besser, so etwas zu tun wie: if( typeof( $(this).attr('name') ) != 'undefined' ) { // ... } da undefined tatsächlich mit einem einfachen: undefined = 1 neu definiert werden kann

37 Stimmen

@FuzzyDunlop, Ja, aber wenn attr es "" die zurückkehren würde false auch. Es sollte sein true denn ein leeres Attribut ist ein gültiges Attribut. Es besteht auch keine Notwendigkeit für ein double-not, weil if wird ohnehin auf bool zurückgesetzt.

4 Stimmen

Ich denke, wir verwenden || anstelle von &&

696voto

Domenic Punkte 104864

Wie wäre es einfach mit $(this).is("[name]") ?

El [attr] Syntax ist der CSS-Selektor für ein Element mit einem Attribut attr et .is() prüft, ob das aufgerufene Element mit dem angegebenen CSS-Selektor übereinstimmt.

160voto

karim79 Punkte 333786

Wenn Sie das Vorhandensein von Attributen häufig überprüfen werden, würde ich vorschlagen, eine hasAttr Funktion zu verwenden, wie Sie in Ihrer Frage vermuten:

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

125voto

Du bist so nah dran, dass es verrückt ist.

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

Es gibt kein hasAttr, aber wenn man ein Attribut mit seinem Namen anspricht, wird es einfach undefiniert zurückgegeben, wenn es nicht existiert.

Aus diesem Grund funktioniert der unten stehende Text. Wenn Sie das Attribut name aus #heading entfernen, wird der zweite Alarm ausgelöst.

Aktualisierung: Wie in den Kommentaren angegeben, werden die folgenden NUR funktionieren, wenn das Attribut vorhanden ist UND nicht auf etwas gesetzt wird, wenn das Attribut zwar vorhanden, aber leer ist

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

27 Stimmen

Wenn der Name attr vorhanden, aber eine leere Zeichenkette ist, würde das Attribut zwar existieren, aber der Test würde fehlschlagen.

97voto

Domenic Punkte 104864

Ich bin zwar spät dran, aber... warum nicht einfach this.hasAttribute("name") ?

Siehe Este

19 Stimmen

Oder wenn es Ihnen egal ist, dass es in vielen älteren Browsern und im IE nicht funktioniert

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X