getAttributeRuft das Attribut eines DOM-Elements ab, während el.iddie Eigenschaft dieses DOM-Elements abgerufen wird . Sie sind nicht gleich.
Meistens werden DOM-Eigenschaften mit Attributen synchronisiert.
Die Synchronisation garantiert jedoch nicht den gleichen Wert . Ein klassisches Beispiel ist zwischen el.hrefund el.getAttribute('href')für ein Ankerelement.
Beispielsweise:
<a href="/" id="hey"></a>
<script>
var a = document.getElementById('hey')
a.getAttribute('href') // "/"
a.href // Full URL except for IE that keeps '/'
</script>
Dieses Verhalten tritt auf, weil laut W3C die Eigenschaft href eine wohlgeformte Verbindung sein muss. Die meisten Browser respektieren diesen Standard (raten Sie mal, wer nicht?).
Es ist ein weiterer Fall für die inputs‘ checkedEigenschaft. Die DOM-Eigenschaft gibt zurück trueoder falsewährend das Attribut die Zeichenfolge "checked"oder eine leere Zeichenfolge zurückgibt .
Und dann gibt es einige Eigenschaften, die nur in eine Richtung synchronisiert werden . Das beste Beispiel ist die valueEigenschaft eines inputElements. Durch Ändern des Werts über die DOM-Eigenschaft wird das Attribut nicht geändert (Bearbeiten: Überprüfen Sie den ersten Kommentar auf mehr Genauigkeit).
Aus diesen Gründen würde ich vorschlagen, dass Sie weiterhin die DOM- Eigenschaften und nicht die Attribute verwenden, da sich deren Verhalten zwischen den Browsern unterscheidet.
In der Realität gibt es nur zwei Fälle, in denen Sie die Attribute verwenden müssen:
- Ein benutzerdefiniertes HTML-Attribut, da es nicht mit einer DOM-Eigenschaft synchronisiert ist.
- Um auf ein integriertes HTML-Attribut zuzugreifen, das nicht über die Eigenschaft synchronisiert wird, benötigen Sie das Attribut (z. B. das Original
valueeines inputElements).
Wenn Sie eine ausführlichere Erklärung wünschen, empfehle ich Ihnen dringend, diese Seite zu lesen . Es dauert nur ein paar Minuten, aber Sie werden von den Informationen (die ich hier zusammengefasst habe) begeistert sein.