Was ist der Unterschied zwischen textContent
und innerText
in JavaScript?
Kann ich textContent
wie folgt verwenden:
var logo$ = document.getElementsByClassName('logo')[0];
logo$.textContent = "Example";
javascript
JK
quelle
quelle
innerText
undtextContent
sind entschieden nicht gleich. Leerzeichen im Knoteninhalt führen dazu, dass die beiden Eigenschaften unterschiedliche Inhalte ergeben, ebenso wie das Auftreten vonbr
Elementen und anderen auf Blockebene gerenderten Nachkommen.Antworten:
Keine der anderen Antworten liefert die vollständige Erklärung, daher diese. Die wichtigsten Unterschiede zwischen
innerText
undtextContent
werden in Kelly Nortons Blogpost sehr gut umrissen : innerText vs. textContent . Nachfolgend finden Sie eine Zusammenfassung:innerText
war nicht Standard, währendtextContent
früher standardisiert wurde.innerText
Gibt den sichtbaren Text zurück, der in einem Knoten enthalten ist, währendtextContent
der vollständige Text zurückgegeben wird. Zum Beispiel auf der folgenden HTML<span>Hello <span style="display: none;">World</span></span>
,innerText
kehrt ‚Hallo‘, währendtextContent
kehrt ‚Hallo Welt‘. Eine vollständigere Liste der Unterschiede finden Sie in der Tabelle unter http://perfectionkills.com/the-poor-misunderstood-innerText/ (weitere Informationen unter 'innerText' funktionieren im IE, jedoch nicht in Firefox ).innerText
ist es viel leistungsintensiver: Es erfordert Layoutinformationen, um das Ergebnis zurückzugeben.innerText
ist nur fürHTMLElement
Objekte definiert , währendtextContent
für alleNode
Objekte definiert ist .Eine
textContent
Problemumgehung für in IE8- würde eine rekursive Funktion beinhalten, dienodeValue
auf allenchildNodes
angegebenen Knoten verwendet wird. Hier ist ein Versuch mit einer Polyfüllung:quelle
innerText
schaltet<br>
Elemente in Zeilenumbrüche, währendtextContent
wird einfach ignorieren. Also werden 2 Wörter mit nur einem<br>
Element dazwischen (und ohne Leerzeichen) bei der Verwendung verkettettextContent
elem.textContent = 'foobar'
vselem.innerText = 'foobar'
innerText
undtextContent
: Wenn Sie dastext-transform
eines Elements durch CSS ändern, wirkt sich dies auf das Ergebnis von 'innerText' aus, nicht jedoch auf das Ergebnis vontextContent
. Zum Beispiel:innerText
von<div style="text-transform: uppercase;">Hello World</div>
wird "HALLO WORLD" sein, währendtextContent
"Hello World" sein wird.textContent
ist der einzige verfügbare Textknoten:innerText
Wertet in Elementknoten <br> Elemente aus, währendtextContent
Steuerzeichen ausgewertet werden:span.innerText
gibt:span.textContent
gibt:Zeichenfolgen mit Steuerzeichen (z. B. Zeilenvorschübe) sind nicht verfügbar
textContent
, wenn der Inhalt mit festgelegt wurdeinnerText
. Umgekehrt (Steuerzeichen setzen mittextContent
) werden alle Zeichen sowohl mitinnerText
als auch zurückgegebentextContent
:quelle
Beide
innerText
&textContent
sind ab 2016 standardisiert. AlleNode
Objekte (einschließlich Reintextknoten) habentextContent
, aber nurHTMLElement
Objekte habeninnerText
.Funktioniert zwar
textContent
mit den meisten Browsern, funktioniert jedoch nicht mit IE8 oder früher. Verwenden Sie diese Polyfüllung, damit sie nur unter IE8 funktioniert. Diese Polyfüllung funktioniert nicht mit IE7 oder früher.Die
Object.defineProperty
Methode ist in IE9 oder höher verfügbar, steht jedoch in IE8 nur für DOM-Objekte zur Verfügung.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent
quelle
innerText
dein Freund.Object.defineProperty()
?Für diejenigen, die diese Frage gegoogelt haben und hier angekommen sind. Ich denke, die klarste Antwort auf diese Frage findet sich im MDN-Dokument: https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent .
Sie können alle Punkte vergessen, die Sie verwirren könnten, aber denken Sie an zwei Dinge:
textContent
ist dies normalerweise die Eigenschaft, nach der Sie suchen.innerText
der Text angenähert, den der Benutzer erhalten würde, wenn er den Inhalt des Elements mit dem Cursor hervorhebt und dann in die Zwischenablage kopiert. UndtextContent
gibt Ihnen alles, sichtbar oder versteckt, einschließlich<script>
und<style>
Elemente.quelle
textContent wird von den meisten Browsern unterstützt. Es wird von ie8 oder früher nicht unterstützt, es kann jedoch eine Polyfüllung verwendet werden
Siehe http://www.w3schools.com/jsref/prop_node_textcontent.asp
quelle
textContent gibt Volltext zurück und kümmert sich nicht um die Sichtbarkeit, während innerText dies tut.
Ausgabe von textContent:
Ausgabe von innerText (beachten Sie, wie innerText Tags wie erkennt
<br>
und versteckte Elemente ignoriert):quelle
Abgesehen von all den Unterschieden, die in den anderen Antworten genannt wurden, ist hier noch einer, den ich erst kürzlich entdeckt habe:
Obwohl die
innerText
Eigenschaft seit 2016 standardisiert sein soll, weist sie Unterschiede zwischen den Browsern auf: Mozilla ignoriert U + 200E- und U + 200F-Zeichen ("lrm" und "rlm")innerText
, Chrome jedoch nicht.Firefox meldet 3 und 2, Chrome meldet 3 und 3.
Ich bin mir noch nicht sicher, ob dies ein Fehler ist (und wenn ja, in welchem Browser) oder nur eine dieser skurrilen Inkompatibilitäten, mit denen wir leben müssen.
quelle
innerHTML führt sogar die HTML-Tags aus, die gefährlich sein können und jede Art von clientseitigem Injection-Angriff wie DOM-basiertes XSS verursachen. Hier ist das Code-Snippet:
Wenn Sie .textContent verwenden, werden die HTML-Tags nicht ausgewertet und als Zeichenfolge gedruckt.
Referenz: https://www.scip.ch/en/?labs.20171214
quelle