Ich verwende einfaches js, um den inneren Text eines Beschriftungselements zu ändern, und ich war mir nicht sicher, aus welchen Gründen ich innerHTML oder nodeValue oder textContent verwenden sollte. Ich muss keinen neuen Knoten erstellen oder die HTML-Elemente oder ähnliches ändern - ersetzen Sie einfach den Text. Hier ist ein Beispiel für den Code:
var myLabel = document.getElementById("#someLabel");
myLabel.innerHTML = "Some new label text!"; // this works
myLabel.firstChild.nodeValue = "Some new label text!"; // this also works.
myLabel.textContent = "Some new label text!"; // this also works.
Ich habe die jQuery-Quelle durchgesehen und sie verwendet nodeValue genau einmal, aber innerHTML und textContent mehrmals. Dann fand ich diesen jsperf-Test, der anzeigt, dass der firstChild.nodeValue deutlich schneller ist. Zumindest interpretiere ich das so.
Wenn firstChild.nodeValue so viel schneller ist, was ist der Haken? Wird es nicht allgemein unterstützt? Gibt es ein anderes Problem?
quelle
nodeValue
analysiert auch kein HTML.textContent
Ausgängetext/plain
während.innerHTML
Ausgängetext/html
.Kurzes Beispiel:
var example = document.getElementById('exampleId');
example.textContent = '<a href="https://google.com">google</a>';
Ausgabe: <a href="http://google.com"> Google </a>
example.innerHTML = '<a href="https://google.com">google</a>';
Ausgabe: google
Sie können dem ersten Beispiel
text/plain
entnehmen, dass die Ausgabe des Typs nicht vom Browser analysiert wird und der gesamte Inhalt angezeigt wird. Die Ausgabe des Typstext/html
weist den Browser an, sie vor der Anzeige zu analysieren.MDN innerHTML , MDN textContent , MDN nodeValue
quelle
Die beiden, die ich gut kenne und mit denen ich arbeite, sind innerHTML und textContent .
Ich verwende textContent, wenn ich nur den Text eines Absatzes oder einer Überschrift wie folgt ändern möchte:
Also, textcontent ändert einfach den Text, aber es funktioniert nicht Parsing HTML, wie wir aus den Tags sichtbar im Klartext im Ergebnis dort berichten.
Wenn wir HTML analysieren möchten, verwenden wir innerHTML wie folgt :
In diesem zweiten Beispiel wird die Zeichenfolge, die ich der innerHTML- Eigenschaft des DOM-Elements zuweist, als HTML analysiert .
Das ist großartig und eine große Sicherheitslücke :)
(Suchen Sie nach XSS, wenn Sie mehr über die Sicherheit dafür erfahren möchten.)
quelle
innerText ist ungefähr das, was Sie erhalten würden, wenn Sie den Text auswählen und kopieren würden. Nicht gerenderte Elemente sind in innerText nicht vorhanden.
textContent ist eine Verkettung der Werte aller TextNodes im Unterbaum. Ob gerendert oder nicht.
Hier ist ein großartiger Beitrag, in dem die Unterschiede detailliert beschrieben werden
innerHTML sollte nicht in einen Vergleich mit innerText oder textContent einbezogen werden, da es völlig anders ist und Sie wirklich wissen sollten, warum :-) Suchen Sie es separat
quelle
[Hinweis: In diesem Beitrag geht es mehr darum, bestimmte Daten zu teilen, die jemandem helfen könnten, als den Leuten zu sagen, was sie tun sollen.]
Falls sich jemand fragt, was heute am schnellsten ist: https://jsperf.com/set-innertext-vs-innerhtml-vs-textcontent & https://jsperf.com/get-innertext-vs-innerhtml-vs-textcontent ( Beim zweiten Test handelt es sich bei dem Inhalt des Bereichs um einfachen Text. Die Ergebnisse können sich je nach Inhalt ändern.
Es scheint, dass dies
.innerHtml
der große Gewinner in Bezug auf reine Geschwindigkeit ist!(HINWEIS: Ich spreche hier nur von Geschwindigkeit. Vielleicht möchten Sie nach anderen Kriterien suchen, bevor Sie das zu verwendende auswählen!)
quelle
Element.innerHTML-Eigenschaft
set
oderget
HTML-Code des Elements.Bsp.: Wir haben ein
<h1>
Etikett und einen starken Stil:<h1 id="myHeader" style="color: green"><strong>My Header</strong> Normal Text</h1>
Zumget
Inhalt des Elements hat id „myHeader“ gleich, werden wir das gleiche tun:Ergebnis zurückgeben:
Um neuen Inhalt (Wert) für dieses Element zu "setzen", befindet sich der Code hier:
Diese Eigenschaft funktioniert also nicht nur mit einfachem Text, sondern zielt auch darauf ab, HTML-Code zu übergeben oder zu kopieren.
=> Wir sollten es nicht benutzen.
Viele Programmierer (einschließlich ich) verwenden dieses Attribut jedoch, um Text in eine Webseite einzufügen, und diese Methode birgt ein potenzielles Risiko:
Aus diesem Grund wird die Verwendung
innerHTML
beim Einfügen von einfachem Text nicht empfohlen, stattdessen verwendettextContent
. DietextContent
Eigenschaft wird nicht verstehen, dass der Code, den Sie übergeben, eine HTML-Syntax ist, sondern nur ein 100% iger Text, nicht mehr und nicht weniger.Das Ergebnis wird zurückgegeben, wenn
textContent
im obigen Beispiel Folgendes verwendet wird:quelle