Unterschied zwischen jQuery attr() und getAttribute()
Der jQuery-Dokumentation für die attr
Methode besagt, dass:
Attributwerte sind strings mit Ausnahme von ein paar Parametern
wie Wert-und tabindex.
... Und das scheint der Fall zu sein. Betrachten Sie das folgende element:
<input type="text" id="example" tabindex="3">
Die folgende Zeile funktioniert in der Tat zeigen, "Zahl", nicht "string":
alert(typeof $("#example").attr("tabindex")); //Number
Nun, die Sache, die mich verwirrend ist, dass bei der Verwendung der DOM-Methode getAttribute
, erhalten Sie ein anderes Ergebnis:
alert(typeof $("#example")[0].getAttribute("tabindex")); //String
Blick auf das jQuery-Quelle für die attr
Methode, scheint es, dass jQuery einfach zurückgegeben, was getAttribute
gibt, also warum gibt es einen Unterschied? Hier ist die relevanten Zeilen der jQuery-source:
ret = elem.getAttribute( name );
//Non-existent attributes return null, we normalize to undefined
return ret === null ?
undefined :
ret;
Und hier ist ein fiddle das Problem veranschaulichen. Nur um die Dinge zu verwirren weiter, ich habe es ausprobiert in Chrome 15, Firefox 8, IE8 und IE7, und alle Verhalten sich wie oben beschrieben, außer für den IE7, die Warnungen "Anzahl" für beide (was ich erwarten würde, zu passieren).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil jQuery definiert eine propHook für
tabIndex
, die ausdrücklichparseInt
's der return-Typ;Dieser Haken ist dann Hinzugefügt, um die
attrHook
das ist der Grund, warum das Verhalten beobachtet wird, in derattr
Funktion (und warum es zuerst erscheint keine attrHook definiert ist, für dietabIndex
).