Ich habe eine Dropdown-Liste, die mit Javascript gefüllt ist.
Bei der Entscheidung, welcher Standardwert beim Laden angezeigt werden soll, wurde mir klar, dass die folgenden Eigenschaften genau dieselben Werte aufweisen:
innerText
innerHtml
label
text
textContent
outerText
Meine eigene Forschung zeigt Benchmarking-Tests oder Vergleiche zwischen einigen von ihnen, aber nicht allen.
Ich kann meinen eigenen gesunden Menschenverstand verwenden und den einen oder anderen wählen, da sie das gleiche Ergebnis liefern, aber ich befürchte, dass dies keine gute Idee ist, wenn sich die Daten ändern.
Meine Ergebnisse sind:
innerText
zeigt den Wert unverändert an und ignoriert eventuell enthaltene HTML-FormatierungeninnerHTML
zeigt den Wert an und wendet alle HTML-Formatierungen anlabel
scheint das gleiche zu sein wieinnerText
, also kann ich den Unterschied nicht sehentext
scheint die gleiche zu sein wieinnerText
die jQuery-KurzversiontextContent
erscheint gleichinnerText
, formatiert aber weiter (z. B.\n
)outerText
scheint das gleiche zu sein wieinnerText
Meine Forschung kann mich nur so weit bringen, dass ich nur testen kann, woran ich denken oder was veröffentlicht wird. Kann jemand jedoch bestätigen, ob meine Forschung korrekt ist und ob etwas Besonderes an label
und ist outerText
?
quelle
.text()
den Textinhalt eines Elements abrufen, da dies maximale browserübergreifende Unterstützung bietet.Antworten:
Von MDN :
Enthält also
innerText
keinen Text, der von CSS ausgeblendet wird, sonderntextContent
wird.Im Fall verpassen Sie, lassen Sie mich wiederholen deutlicher: Do nicht verwenden ,
.innerHTML
um Insert HTML innerhalb eines Elements und die notwendigen Vorkehrungen getroffen , um sicherzustellen , sofern Sie nicht ausdrücklich die Absicht , dass die HTML Sie einfügen nicht bösartige Inhalte enthalten können. Wenn Sie nur Text einfügen möchten, verwenden Sie.textContent
oder wenn Sie IE8 und früher unterstützen müssen, verwenden Sie die Funktionserkennung, um zwischen.textContent
und auszuschalten.innerText
.Ein Hauptgrund dafür, dass es so viele verschiedene Eigenschaften gibt, ist, dass verschiedene Browser ursprünglich unterschiedliche Namen für diese Eigenschaften hatten und es immer noch keine vollständige browserübergreifende Unterstützung für alle gibt. Wenn Sie jQuery verwenden, sollten Sie sich daran halten,
.text()
da dies dazu dient, browserübergreifende Unterschiede auszugleichen. *Für einige der anderen:
outerHTML
ist im Grunde dasselbe wieinnerHTML
, außer dass es die Start- und End-Tags des Elements enthält, zu dem es gehört. Ich kann anscheinend nicht viel Beschreibung findenouterText
. Ich denke, das ist wahrscheinlich ein obskures Vermächtnis und sollte vermieden werden.quelle
in order to retrieve or write text within an element, people use innerHTML. textContent should be used instead
dieses Dokuments ist , dass textContent von IE 8 nicht unterstützt wird, was immer noch ziemlich weit verbreitet ist, da dies die mit Windows 7 gebündelte Version ist. Und FireFox unterstützt innerText nicht . Während also innerHTML- ist nicht ideal für diesen Zweck geeignet ist , hat es eine bessere Cross-Browser - Zuverlässigkeit..textContent
und auszuschalten.innerText
, oder etwas wie jQuery verwenden, um diese Browserunterschiede auszugleichen.textContent
mit HTML-Tags verwenden. Wenn Sie HTML einfügen müssen, würden Sie.innerHTML
HTML-Knoten entweder verwenden oder aufbauendocument.createElement()
usw.innerHTML
(im Gegensatz zutextContent
) kann die Tür für XSS-Angriffe (Cross-Site Scripting) auf Ihre Anwendung öffnen. Wenn der Inhalt, über den in das DOM eingefügtinnerHTML
wird, nicht vollständig vertrauenswürdig ist, kann ein Angreifer mithilfe eines<script>
Elements Ihre Anwendung entführen, die unter der Berechtigungsstufe eines Benutzers oder Administrators authentifiziert wurde. Alle Angriffe, einschließlich seltsam aussehender Angriffe wie<img src="x.x" onerror="alert('Hacked!');"/>
und einer Vielzahl von hinterhältigeren, werden effektiv zerstört, indem einfachtextContent
in diesem Zusammenhang anstelle des Gefährlichen verwendet wirdinnerHTML
.Eine Dropdown-Liste enthält eine Sammlung von
Option
Objekten. Verwenden Sie daher die.text
Eigenschaft, um die Textdarstellung des Elements zu überprüfenÜbrigens,
Das ist nicht richtig;
$(element).text()
ist die jQuery-Version, währendelement.text
die Eigenschaftszugriffsversion ist.quelle
Nachtrag zu JLRishes ansonsten ausgezeichneter Antwort:
Der Grund, warum innerText und OuterText existieren, liegt in der Symmetrie mit InnerHTML und OuterHTML. Dies wird wichtig, wenn Sie der Eigenschaft zuweisen .
Angenommen, Sie haben ein Element
e
mit HTML-Code<b>Lorem Ipsum</b>
:quelle
textContent
formatiert nicht (\ n)quelle
Informationen zur Kompatibilität der Browser finden Sie unter http://www.quirksmode.org/dom/html/, wenn Sie auf bestimmte Browser abzielen. Weil es so aussieht, als hätten sie alle ihre eigene Art, Dinge zu tun. Aus diesem Grund ist es besser, JQuery .text () ( http://api.jquery.com/text/ ) zu verwenden, wenn Sie nicht herumfummeln möchten.
quelle
text
undlabel
entfernen Sie zusätzliche Leerzeichen. Ich habe diese Ergebnisse beim Abfragen von Optionen in einem Dropdown-Menü erhalten:quelle