601 Stimmen

Was ist der Unterschied zwischen Eigenschaften und Attributen in HTML?

Nach den Änderungen in jQuery 1.6.1, habe ich versucht, den Unterschied zwischen Eigenschaften und Attributen in HTML zu definieren.

Ein Blick auf die Liste auf der jQuery 1.6.1 Versionshinweise (ganz unten) kann man die HTML-Eigenschaften und -Attribute wie folgt klassifizieren:

  • Eigenschaften: Alles, was entweder einen booleschen Wert hat oder von UA berechnet wird, wie z. B. selectedIndex.

  • Attribute: 'Attribute', die einem HTML-Element hinzugefügt werden können, das weder boolesch ist noch einen von der UA generierten Wert enthält.

Was denken Sie?

1189voto

Šime Vidas Punkte 172810

Wenn Sie HTML-Quellcode schreiben, können Sie Eigenschaften auf Ihre HTML-Elemente. Sobald der Browser Ihren Code analysiert hat, wird ein entsprechender DOM-Knoten erstellt. Dieser Knoten ist ein Objekt und hat daher Eigenschaften .

Zum Beispiel dieses HTML-Element:

<input type="text" value="Name:">

hat 2 Attribute ( type y value ).

Sobald der Browser diesen Code analysiert hat, wird ein HTMLInputElement Objekt wird erstellt, und dieses Objekt enthält Dutzende von Eigenschaften wie: accept, accessKey, align, alt, attributes, autofocus, baseURI, checked, childElementCount, childNodes, children, classList, className, clientHeight, etc.

Für ein bestimmtes DOM-Knotenobjekt sind Eigenschaften die Eigenschaften dieses Objekts, und Attribute sind 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 denselben oder ähnlichen Namen, aber es ist keine Eins-zu-Eins-Beziehung. Zum Beispiel für dieses HTML-Element:

<input id="the-input" type="text" value="Name:">

wird der entsprechende DOM-Knoten mit id , type y value Eigenschaften (unter anderem):

  • Le site id Eigenschaft ist eine reflektierte Eigenschaft für die id Attribut: Beim Abrufen der Eigenschaft wird der Attributwert gelesen, beim Setzen der Eigenschaft wird der Attributwert geschrieben. id ist eine rein reflektierte Eigenschaft, sie verändert oder begrenzt den Wert nicht.

  • Le site type Eigenschaft ist eine reflektierte Eigenschaft für die type Attribut: Beim Abrufen der Eigenschaft wird der Attributwert gelesen, beim Setzen der Eigenschaft wird der Attributwert geschrieben. type ist keine rein reflektierte Eigenschaft, denn sie ist beschränkt auf bekannte Werte (z. B. die gültigen Typen einer Eingabe). Hätten Sie <input type="foo"> entonces theInput.getAttribute("type") gibt Ihnen "foo" sondern theInput.type gibt Ihnen "text" .

  • Im Gegensatz dazu ist die value Eigenschaft spiegelt nicht die value zuordnen. Stattdessen ist es das aktueller Wert der Eingabe. Wenn der Benutzer den Wert des Eingabefelds manuell ändert, wird der value wird diese Änderung widerspiegeln. Wenn der Benutzer also Folgendes eingibt "John" in das Eingabefeld ein, dann:

    theInput.value // returns "John"

    in der Erwägung, dass:

    theInput.getAttribute('value') // returns "Name:"

    Le site value spiegelt die Eigenschaft aktuell Text-Inhalt innerhalb des Eingabefeldes, während die value enthält das Attribut anfänglich Text-Inhalt der value Attribut aus dem HTML-Quellcode.

    Wenn Sie also wissen wollen, was sich gerade im Textfeld befindet, lesen Sie die Eigenschaft. Wenn Sie jedoch wissen wollen, was der Anfangswert des Textfeldes war, lesen Sie das Attribut. Oder Sie können die defaultValue Eigenschaft, die ein reines Spiegelbild der value Attribut:

    theInput.value                 // returns "John"
    theInput.getAttribute('value') // returns "Name:"
    theInput.defaultValue          // returns "Name:"

Es gibt mehrere Eigenschaften, die ihr Attribut direkt widerspiegeln ( rel , id ), einige sind direkte Spiegelungen mit leicht abweichenden Namen ( htmlFor spiegelt die for Attribut, className spiegelt die class Attribut), viele, die ihr Attribut widerspiegeln, aber mit Einschränkungen/Änderungen ( src , href , disabled , multiple ), und so weiter. Die Spezifikation deckt die verschiedenen Arten der Reflexion ab.

128voto

subtleseeker Punkte 2982

Nach der Lektüre Sime Vidas suchte ich weiter und fand eine sehr klare und leicht verständliche Erklärung in der Angular-Dokumente .

HTML-Attribut vs. DOM-Eigenschaft

-------------------------------


Attribute werden durch HTML definiert. Die Eigenschaften werden durch das DOM (Dokument-Objektmodell) definiert.

  • Einige HTML-Attribute haben eine 1:1-Zuordnung zu Eigenschaften. id ist eine Beispiel.

  • Einige HTML-Attribute haben keine entsprechenden Eigenschaften. colspan ist ein Beispiel.

  • Einige DOM-Eigenschaften haben keine entsprechenden Attribute. textContent ist ein Beispiel.

  • Viele HTML-Attribute scheinen Eigenschaften zuzuordnen ... aber nicht auf die Weise, wie Sie vielleicht denken!

Die letzte Kategorie ist verwirrend, bis man diese allgemeine Regel verstanden hat:

Attribute initialisieren DOM-Eigenschaften und dann sind sie fertig. Eigenschaft Werte können sich ändern, Attributwerte nicht.

Wenn der Browser zum Beispiel Folgendes wiedergibt <input type="text" value="Bob"> , wird ein entsprechender DOM-Knoten mit einer value Eigenschaft initialisiert auf "Bob".

Wenn der Benutzer "Sally" in das Eingabefeld eingibt, wird das DOM-Element value Eigenschaft wird zu "Sally". Aber die HTML value Attribut bleibt unverändert, wie Sie feststellen, wenn Sie das Eingabeelement nach diesem Attribut fragen Attribut: input.getAttribute('value') gibt "Bob" zurück.

Das HTML-Attribut value spezifiziert die anfänglich Wert; der DOM value ist die Eigenschaft aktuell Wert.


Le site disabled Attribut ist ein weiteres besonderes Beispiel. Das Attribut einer Schaltfläche disabled Eigenschaft ist false Standardmäßig ist die Schaltfläche also aktiviert. Unter fügen Sie die disabled Attribut initialisiert allein sein Vorhandensein die Schaltfläche disabled Eigenschaft zu true daher ist die Schaltfläche deaktiviert.

Hinzufügen und Entfernen der disabled Attribut deaktiviert und aktiviert die Schaltfläche. Der Wert des Attributs ist irrelevant, weshalb Sie eine Schaltfläche nicht aktivieren können, indem Sie <button disabled="false">Still Disabled</button>.

Einstellung der Schaltfläche disabled Eigenschaft deaktiviert oder aktiviert die Schaltfläche. Der Wert der Schaltfläche Eigenschaft Angelegenheiten.

Das HTML-Attribut und die DOM-Eigenschaft sind nicht dasselbe, auch wenn wenn sie denselben Namen haben.

51voto

sibidiba Punkte 6172

In den Antworten wird bereits erklärt, wie Attribute und Eigenschaften unterschiedlich gehandhabt werden, aber ich möchte wirklich darauf hinweisen, wie völlig wahnsinnig das ist. Auch wenn es bis zu einem gewissen Grad die Spezifikation ist.

Es ist verrückt, dass einige der Attribute (z.B. id, class, foo, bar ), um nur eine Art von Wert im DOM zu erhalten, während einige Attribute (z. B. angekreuzt, ausgewählt ), um zwei Werte beizubehalten, nämlich den Wert "beim Laden" und den Wert des "dynamischen Zustands". (Ist das DOM nicht dazu da, den Zustand der Dokument in vollem Umfang?)

Es ist unbedingt erforderlich, dass zwei Eingabefelder z.B. ein Text und eine Ankreuzfeld sich genau so verhalten . Wenn das Texteingabefeld keinen separaten Wert "beim Laden" und den "aktuellen, dynamischen" Wert behält, warum dann das Ankreuzfeld? Wenn das Ankreuzfeld zwei Werte für die geprüft Attribut, warum hat es nicht zwei für sein Klasse y id Eigenschaften? Wenn Sie erwarten, dass Sie den Wert eines Text *Eingabefeld* und Sie erwarten, dass sich das DOM (d.h. die "serialisierte Darstellung") ändert und diese Änderung widerspiegelt, warum um alles in der Welt sollten Sie dann nicht dasselbe von einem Eingabe Feld vom Typ Ankreuzfeld für das geprüfte Attribut?

Die Differenzierung "es handelt sich um ein boolesches Attribut" macht für mich einfach keinen Sinn oder ist zumindest keine ausreichende Begründung dafür.

20voto

Willem van der Veen Punkte 26043

Unterschiedliche HTML-Eigenschaften und -Attribute:

Schauen wir uns zunächst die Definitionen dieser Begriffe an, bevor wir den Unterschied in HTML bewerten:

Englische Definition:

  • Attribute beziehen sich auf zusätzliche Informationen eines Objekts.
  • Eigenschaften beschreiben die Merkmale eines Objekts.

Im HTML-Kontext:

Wenn der Browser den HTML-Code analysiert, erstellt er eine Baumdatenstruktur, die im Grunde eine speicherinterne Darstellung des HTML-Codes ist. Die Baumdatenstruktur enthält Knoten, die HTML-Elemente und Text sind. Die Attribute und Eigenschaften beziehen sich auf die folgende Weise darauf:

  • Attribute sind zusätzliche Informationen, die wir in den HTML-Code einfügen können, um initialisieren bestimmte DOM-Eigenschaften.
  • Eigenschaften werden gebildet, wenn der Browser das HTML parst und das DOM erzeugt. Jedes der Elemente im DOM hat seine eigenen Eigenschaften, die alle vom Browser festgelegt werden. Bei einigen dieser Eigenschaften kann der Anfangswert durch HTML-Attribute festgelegt werden. Wann immer sich eine DOM-Eigenschaft ändert, die Einfluss auf die gerenderte Seite hat, wird die Seite sofort wiederhergestellt

Es ist auch wichtig zu wissen, dass die Zuordnung dieser Eigenschaften nicht 1 zu 1 ist, d.h. nicht jedes Attribut, das wir einem HTML-Element geben, hat eine ähnlich benannte DOM-Eigenschaft.

Außerdem haben verschiedene DOM-Elemente unterschiedliche Eigenschaften. Zum Beispiel kann ein <input> Element eine Eigenschaft value hat, die bei einem <div> Eigentum.

Beispiel:

Nehmen wir das folgende HTML-Dokument:

 <!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">  <!-- charset is a attribute -->
  <meta name="viewport" content="width=device-width"> <!-- name and content are attributes -->
  <title>JS Bin</title>
</head>
<body>
<div id="foo" class="bar foobar">hi</div> <!-- id and class are attributes -->
</body>
</html>

Dann untersuchen wir die <div> in der JS-Konsole:

 console.dir(document.getElementById('foo'));

Wir sehen die folgenden DOM-Eigenschaften (chrome devtools, nicht alle Eigenschaften werden angezeigt):

html properties and attributes

  • Wir können sehen, dass das Attribut id im HTML jetzt auch eine id-Eigenschaft im DOM ist. Die id wurde von HTML initialisiert (obwohl wir sie mit Javascript ändern könnten).
  • Wir sehen, dass das class-Attribut in der HTML-Datei keine entsprechende class-Eigenschaft hat ( class ist ein reserviertes Schlüsselwort in JS). Aber eigentlich 2 Eigenschaften, classList y className .

11voto

Daniel Ruf Punkte 7379

Nun, diese werden von der w3c spezifiziert, 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 für manche Dinge bevorzugen sie Requisiten

Zusammenfassung der bevorzugten Verwendung

Die Methode .prop() sollte für boolesche Attribute/Eigenschaften und für Eigenschaften verwendet werden, die in HTML nicht vorhanden sind (wie window.location). Alle anderen Attribute (die in der HTML-Datei zu sehen sind) können und sollten weiterhin mit der Methode .attr() bearbeitet werden.

Nun, eigentlich müssen Sie nicht etwas ändern, wenn Sie attr oder prop oder beides verwenden, beides funktioniert aber ich habe in meiner eigenen Anwendung gesehen, dass prop funktioniert, wo atrr nicht funktioniert, also habe ich in meiner 1.6-Anwendung prop genommen =)

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