Nach den in jQuery 1.6.1 vorgenommenen Änderungen habe ich versucht, den Unterschied zwischen Eigenschaften und Attributen in HTML zu definieren.
Wenn man sich die Liste in den Versionshinweisen zu jQuery 1.6.1 (unten) ansieht , kann man HTML-Eigenschaften und -Attribute wie folgt klassifizieren:
Eigenschaften: Alle, die entweder einen booleschen Wert haben oder UA-berechnet sind, z. B. selectedIndex.
Attribute: 'Attribute', die einem HTML-Element hinzugefügt werden können, das weder boolesch ist noch einen von UA generierten Wert enthält.
Gedanken?
javascript
html
dom
properties
schalkneethling
quelle
quelle
Antworten:
Beim Schreiben von HTML-Quellcode können Sie Attribute für Ihre HTML-Elemente definieren. Sobald der Browser Ihren Code analysiert, wird ein entsprechender DOM-Knoten erstellt. Dieser Knoten ist ein Objekt und hat daher Eigenschaften .
Zum Beispiel dieses HTML-Element:
hat 2 Attribute (
type
undvalue
).Sobald der Browser diesen Code analysiert, wird ein HTMLInputElement- Objekt erstellt, und dieses Objekt enthält Dutzende von Eigenschaften wie: accept, accessKey, align, alt, Attribute, Autofokus, baseURI, markiert, childElementCount, childNodes, children, classList, className, clientHeight usw.
Für ein bestimmtes DOM-Knotenobjekt sind Eigenschaften die Eigenschaften dieses Objekts und Attribute die Elemente der
attributes
Eigenschaft dieses Objekts.Wenn ein DOM-Knoten für ein bestimmtes HTML-Element erstellt wird, beziehen sich viele seiner Eigenschaften auf Attribute mit demselben oder einem ähnlichen Namen, es handelt sich jedoch nicht um eine Eins-zu-Eins-Beziehung. Zum Beispiel für dieses HTML-Element:
der entsprechende DOM Knoten hat
id
,type
undvalue
Eigenschaften (unter anderem):Die
id
Eigenschaft ist eine reflektierte Eigenschaft für dasid
Attribut: Beim Abrufen der Eigenschaft wird der Attributwert gelesen, und beim Festlegen der Eigenschaft wird der Attributwert geschrieben.id
ist eine reine reflektierte Eigenschaft, die den Wert nicht ändert oder einschränkt.Die
type
Eigenschaft ist eine reflektierte Eigenschaft für dastype
Attribut: Beim Abrufen der Eigenschaft wird der Attributwert gelesen, und beim Festlegen der Eigenschaft wird der Attributwert geschrieben.type
ist keine reine reflektierte Eigenschaft, da sie auf bekannte Werte beschränkt ist (z. B. die gültigen Typen einer Eingabe). Wenn Sie hatten<input type="foo">
, danntheInput.getAttribute("type")
gibt Ihnen,"foo"
abertheInput.type
gibt Ihnen"text"
.Im Gegensatz dazu
value
spiegelt dievalue
Eigenschaft das Attribut nicht wider . Stattdessen ist es der aktuelle Wert der Eingabe. Wenn der Benutzer den Wert des Eingabefelds manuell ändert,value
spiegelt die Eigenschaft diese Änderung wider. Wenn der Benutzer also"John"
in das Eingabefeld eingibt, gilt Folgendes:wohingegen:
Die
value
Eigenschaft spiegelt den aktuellen Textinhalt im Eingabefeld wider , während dasvalue
Attribut den anfänglichen Textinhalt desvalue
Attributs aus dem HTML-Quellcode enthält.Wenn Sie also wissen möchten, was sich derzeit im Textfeld befindet, lesen Sie die Eigenschaft. Wenn Sie jedoch wissen möchten, wie hoch der Anfangswert des Textfelds war, lesen Sie das Attribut. Oder Sie können die
defaultValue
Eigenschaft verwenden, die dasvalue
Attribut rein widerspiegelt :Es gibt mehrere Eigenschaften , die direkt ihr Attribut widerspiegeln (
rel
,id
), einige sind direkte Reflexionen mit leicht-verschiedenen Namen (htmlFor
entspricht dasfor
Attribut,className
spiegelt dasclass
Attribut), viele , die ihre Eigenschaft reflektieren , aber mit Einschränkungen / Änderungen (src
,href
,disabled
,multiple
), und so auf. Die Spezifikation deckt die verschiedenen Arten der Reflexion ab.quelle
for
->htmlFor
) und in ähnlicher Weise eine Liste der Eigenschaften, die ihren Anfangswert von einem Attribut beziehen, ihn aber nicht widerspiegeln (input.value
). Ich gehe davon aus, dass dies irgendwo in der Quelle einer Bibliothek wie github.com/Matt-Esch/virtual-dom liegt, aber es ist nicht wirklich dokumentiert.Nachdem ich die Antwort von Sime Vidas gelesen hatte , suchte ich mehr und fand eine sehr einfache und leicht verständliche Erklärung in den eckigen Dokumenten .
quelle
colspan
Attribut hat diecolSpan
Eigenschaft. ... Also, welches Attribut hat jetzt keine verwandte Eigenschaft?Die Antworten erklären bereits, wie Attribute und Eigenschaften unterschiedlich behandelt werden, aber ich möchte wirklich darauf hinweisen, wie verrückt das ist. Auch wenn es bis zu einem gewissen Grad die Spezifikation ist.
Es ist verrückt, einige der Attribute (z. B. id, class, foo, bar ) zu haben, um nur eine Art von Wert im DOM beizubehalten, während einige Attribute (z. B. aktiviert, ausgewählt ) zwei Werte beibehalten; das heißt, der Wert "als es geladen wurde" und der Wert des "dynamischen Zustands". (Soll das DOM nicht den Status des Dokuments in vollem Umfang darstellen?)
Es ist unbedingt erforderlich , dass sich zwei Eingabefelder , z. B. ein Text und ein Kontrollkästchen, gleich verhalten . Wenn das Texteingabefeld keinen separaten Wert "beim Laden" und keinen "aktuellen, dynamischen" Wert enthält, warum wird das Kontrollkästchen aktiviert? Wenn das Kontrollkästchen zwei Werte für das aktivierte Attribut enthält, warum hat es keine zwei für seine Klassen- und ID- Attribute? Wenn Sie erwarten, den Wert eines Texteingabefelds zu ändern , und Sie erwarten, dass sich das DOM (dh die "serialisierte Darstellung") ändert und diese Änderung widerspiegelt, warum um alles in der Welt würden Sie dasselbe nicht von einem Eingabefeld von erwarten ? Typ Checkbox auf das markierte Attribut?
Die Unterscheidung von "es ist ein boolesches Attribut" ergibt für mich einfach keinen Sinn oder ist zumindest kein ausreichender Grund dafür.
quelle
checked
Attribut wird durch diedefaultChecked
Eigenschaft dargestellt (ebenfalls für eine Texteingabe wird dasvalue
Attribut durch diedefaultValue
Eigenschaft dargestellt). Eine zweite Eigenschaftchecked
ist erforderlich, um darzustellen, ob das Kontrollkästchen aktiviert ist, da dies ein wesentlicher Bestandteil der Funktionalität eines Kontrollkästchens ist: Es ist interaktiv und kann vom Benutzer geändert (und auf die Standardeinstellung zurückgesetzt werden, wenn eine Schaltfläche zum Zurücksetzen des Formulars vorhanden ist) auf eine Weise, die ein anderes Attribut wieid
nicht ist. Es hat nichts mit der Tatsache zu tun, dass es sich um ein boolesches Attribut handelt.Nun, diese werden vom w3c angegeben, was ein Attribut und was eine Eigenschaft ist. http://www.w3.org/TR/SVGTiny12/attributeTable.html
aber derzeit sind attr und prop nicht so unterschiedlich und es gibt fast die gleichen
aber sie bevorzugen Requisiten für einige Dinge
Nun, eigentlich müssen Sie nichts ändern, wenn Sie attr oder prop oder beides verwenden. Beide funktionieren, aber ich habe in meiner eigenen Anwendung gesehen, dass prop dort funktioniert, wo atrr nicht funktioniert hat, also habe ich meine 1.6 App prop =) aufgenommen
quelle
Unterschied HTML-Eigenschaften und -Attribute:
Schauen wir uns zunächst die Definitionen dieser Wörter an, bevor wir den Unterschied in HTML bewerten:
Englische Definition:
Im HTML-Kontext:
Wenn der Browser den HTML-Code analysiert, erstellt er eine Baumdatenstruktur, die im Grunde genommen eine In-Memory-Darstellung des HTML-Codes ist. Die Baumdatenstruktur enthält Knoten, die HTML-Elemente und Text sind. Attribute und Eigenschaften beziehen sich auf folgende Weise darauf:
Es ist auch wichtig zu wissen, dass die Zuordnung dieser Eigenschaften nicht 1 zu 1 ist. Mit anderen Worten, nicht jedes Attribut, das wir einem HTML-Element geben, hat eine ähnlich benannte DOM-Eigenschaft.
Weiterhin haben unterschiedliche DOM-Elemente unterschiedliche Eigenschaften. Ein
<input>
Element verfügt beispielsweise über eine value-Eigenschaft, die für eine<div>
Eigenschaft nicht vorhanden ist .Beispiel:
Nehmen wir das folgende HTML-Dokument:
Dann überprüfen wir die
<div>
in der JS-Konsole:Wir sehen die folgenden DOM-Eigenschaften (Chrome Devtools, nicht alle Eigenschaften gezeigt):
class
ist ein reserviertes Schlüsselwort in JS). Aber eigentlich 2 Eigenschaften,classList
undclassName
.quelle