Es sollte auch beachtet werden, dass die Länge zwischen den beiden ebenfalls unterschiedlich ist. jsfiddle.net/sUTVg/458
GreeKatrina
5
@aequalsb Ich erkenne, dass dies jetzt eine alte Frage ist, aber ich muss bemerken, dass die Standardeinstellung der Verwendung von ´.html () ´ gefährlich ist, da der Text als HTML behandelt wird. Wenn Sie diesen Text von einem Querystring-Parameter, Formular, Header, der URL oder einem anderen Ort erhalten, den jemand anderes als Sie bereitstellen oder bearbeiten kann, sind Sie für XSS weit offen.
Canis
105
((bitte bei Bedarf aktualisieren, diese Antwort ist ein Wiki))
Unterfrage: Wenn nur Text, was ist schneller .text()oder .html()?
Wenn Sie also "nur einen Text" haben, verwenden Sie abschließend die html()Methode.
Hinweis: Macht das keinen Sinn? Denken Sie daran, dass die .html()Funktion nur ein Wrapper ist .innerHTML, aber in der .text()Funktion fügt jQuery einen "Entitätsfilter" hinzu , und dieser Filter verbraucht natürlich Zeit.
Ok, wenn Sie wirklich Leistung wollen ... Verwenden Sie reines Javascript, um auf den direkten Textersatz durch die nodeValueEigenschaft zuzugreifen . Benchmark-Schlussfolgerungen:
jQuery's .html()ist ~ 2x schneller als .text().
reines JS ' .innerHTMList ~ 3x schneller als .html().
reines JS ' .nodeValueist ~ 50x schneller als .html(), ~ 100x als .text()und ~ 20x als .innerHTML.
PS: .textContentEigenschaft wurde mit DOM-Level-3 eingeführt, .nodeValueist DOM-Level-2 und ist schneller (!).
Wenn Sie sich jedoch mit nicht vertrauenswürdigen Eingaben befassen, sollten Sie nach Möglichkeit text () verwenden.
Scott Simontis
@ScottSimontis, wenn Sie nodeValueEigenschaft festlegen , verwandelt es ">" in "& lt;" usw.
Peter Krauss
Wenn ich mit Chrome DevTools ( developer.chrome.com/devtools/docs/timeline ) "Benchmarking" durchführe , ist das Ergebnis umgekehrt ( .text()scheint ~ 7x schneller als .html()). Quellcode: codepen.io/damhonglinh/pen/vGpQEO . Ich habe mit 1500 Elementen getestet; .html()dauerte ~ 220ms und .text()dauerte ~ 30ms.
Linh Dam
Hallo @LinhDam. Hum ... unter Verwendung des vollständigen Benchmarks sagt mein Firefox "JQ TIMES (3000x): html = 82 text = 254", "JS TIMES (3000x): html = 15 text = 4" ... und mein Chrome sagt "JQ" TIMES (3000x): html = 82 text = 202 "," JS TIMES (3000x): html = 16 text = 0 ".... also haben beide (Firefox und Chrome) die gleichen Zeitverhältnisse .
Peter Krauss
Um ein echter Benchmark zwischen text () und html () zu sein, sollte die Auswahl in allen Fällen durchgeführt werden oder getElementById oder $ ("# work"), oder Sie werden auch $ ("# work") gegen getElementById
Octavioamu
66
Im ersten Beispiel wird HTML tatsächlich in das eingebettet, divwährend im zweiten Beispiel der Text durch Ersetzen elementbezogener Zeichen durch die entsprechenden Zeichenentitäten ausgeblendet wird, sodass es buchstäblich angezeigt wird (dh das HTML wird nicht gerendert angezeigt ).
Entschuldigung, ich verstehe nicht ganz. Könnten Sie das näher erläutern? Danke
Brettk
Was meinst du mit dem 2. Beispiel "codieren"? Es ist bereits codiert, nein?
Brettk
@Brettk - Ich sagte "codieren", aber das war eher ein Fingerabdruck. Ich habe meine Antwort geändert, um besser zu reflektieren, was ich meine.
Andrew Hare
6
Er meint, dass in der .text()Funktion alle <durch ersetzt werden <. Wenn .html()der Browser also einen Link und etwas Fettdruck .text()sieht, sieht der Browser alles als Text und erstellt keinen Link oder Fettdruck.
Mottie
59
Die text()Methodenentität entgeht jeglichem HTML-Code, der an sie übergeben wird. Verwenden text()Sie diese Option, wenn Sie HTML-Code einfügen möchten, der für Personen sichtbar ist, die die Seite anzeigen.
Diese Antwort war am einfachsten zu verstehen und am besten formatiert +1
Katie
Was ist das diff bw :: html (Daten); & val (Daten); @Owais Qureshi
Gem
9
Seltsam, dass niemand den Vorteil der Verhinderung von Cross Site-Skripten von .text()über erwähnt hat .html()(obwohl andere gerade erwähnt haben, dass .text()die Daten entgehen).
Es wird immer empfohlen, diese zu verwenden, .text()wenn Sie Daten in DOM aktualisieren möchten, bei denen es sich nur um Daten / Text handelt, die der Benutzer sehen kann.
.html() sollte meistens verwendet werden, um den HTML-Inhalt innerhalb eines div zu erhalten.
Verwenden Sie .text (…), wenn Sie den Wert als einfachen Text anzeigen möchten.
Verwenden Sie .html (…), wenn Sie den Wert als HTML-formatierten Text (oder HTML-Inhalt) anzeigen möchten.
Sie sollten auf jeden Fall .text (...) verwenden, wenn Sie nicht sicher sind, ob Ihr Text (z. B. von einem Eingabesteuerelement) keine Zeichen / Tags enthält, die in HTML eine besondere Bedeutung haben. Dies ist sehr wichtig, da dies dazu führen kann, dass der Text nicht richtig angezeigt wird, aber auch dazu, dass ein unerwünschtes JS-Skript-Snippet (z. B. von einer anderen Benutzereingabe) aktiviert wird .
Grundsätzlich verwendet $ ("# div"). Html element.innerHTML, um Inhalte festzulegen, und $ ("# div"). Text verwendet (wahrscheinlich) element.textContent.
$ ('. div'). html (val) legt die HTML-Werte aller ausgewählten Elemente fest, $ ('. div'). text (val) legt die Textwerte aller ausgewählten Elemente fest.
Der Unterschied wird .html()als HTML ausgewertet, .text()als Text bewertet .
Betrachten Sie einen Block HTML- HTML
<divid="mydiv"><divclass="mydiv">
This is a div container
<ul><li><ahref="#">Link 1</a></li><li><ahref="#">Link 2</a></li></ul>
a text after ul
</div></div>
JS
var out1 = $('#mydiv').html();var out2 = $('#mydiv').text();
console.log(out1)// This output all the html tag
console.log(out2)// This is output just the text 'This is a div container Link 1 Link 2 a text after ul'
.text()gibt Ihnen den tatsächlichen Text zwischen HTML-Tags. Zum Beispiel der Absatztext zwischen pTags. Interessant ist, dass Sie mit Ihrem $Selektor den gesamten Text des Elements erhalten, auf das Sie abzielen, sowie den gesamten Text in den untergeordneten Elementen des ausgewählten Elements. Wenn Sie also mehrere pTags mit Text im body-Element haben und a ausführen $(body).text(), erhalten Sie den gesamten Text aus allen Absätzen. (Nur Text, nicht die pTags selbst.)
.html()gibt Ihnen den Text und die Tags. So erhalten Sie $(body).html()im Grunde Ihre gesamte Seite HTML-Seite
.val()funktioniert für Elemente, die ein valueAttribut haben, wie z input. Ein inputmuss nicht enthalten Text oder HTML und somit .text()und .html()wird beides sein nullfür inputElemente.
Bitte korrigieren Sie Ihre Antwort, das erste Snippet sollte verwendet werden text().
MKaama
0
Textfunktion setzt oder ruft den Wert als einfachen Text ab, andernfalls setzt oder ruft die HTML-Funktion den Wert als HTML-Tags ab, um dies zu ändern oder zu modifizieren. Wenn Sie nur den Inhalt ändern möchten, verwenden Sie text (). Wenn Sie jedoch das Markup ändern müssen, müssen Sie hmtl () verwenden.
Es ist eine Scheinantwort für mich nach sechs Jahren.
text()
Methode schneller? Wie viel?Antworten:
Ich denke, der Unterschied ist fast selbsterklärend. Und es ist super trivial zu testen.
jQuery.html()
behandelt die Zeichenfolge als HTML,jQuery.text()
behandelt den Inhalt als TextEin Unterschied, der möglicherweise nicht so offensichtlich ist, wird in der Dokumentation zur jQuery-API beschrieben
In der Dokumentation zu .html () :
Und in der Dokumentation zu .text () :
quelle
((bitte bei Bedarf aktualisieren, diese Antwort ist ein Wiki))
Unterfrage: Wenn nur Text, was ist schneller
.text()
oder.html()
?Antwort:
.html()
ist schneller! Sehen Sie hier ein „Verhalten Test-Kit“ für die ganze Frage .Wenn Sie also "nur einen Text" haben, verwenden Sie abschließend die
html()
Methode.Hinweis: Macht das keinen Sinn? Denken Sie daran, dass die
.html()
Funktion nur ein Wrapper ist.innerHTML
, aber in der.text()
Funktion fügt jQuery einen "Entitätsfilter" hinzu , und dieser Filter verbraucht natürlich Zeit.Ok, wenn Sie wirklich Leistung wollen ... Verwenden Sie reines Javascript, um auf den direkten Textersatz durch die
nodeValue
Eigenschaft zuzugreifen . Benchmark-Schlussfolgerungen:.html()
ist ~ 2x schneller als.text()
..innerHTML
ist ~ 3x schneller als.html()
..nodeValue
ist ~ 50x schneller als.html()
, ~ 100x als.text()
und ~ 20x als.innerHTML
.PS:
.textContent
Eigenschaft wurde mit DOM-Level-3 eingeführt,.nodeValue
ist DOM-Level-2 und ist schneller (!).Sehen Sie diesen vollständigen Benchmark :
quelle
nodeValue
Eigenschaft festlegen , verwandelt es ">" in "& lt;" usw..text()
scheint ~ 7x schneller als.html()
). Quellcode: codepen.io/damhonglinh/pen/vGpQEO . Ich habe mit 1500 Elementen getestet;.html()
dauerte ~ 220ms und.text()
dauerte ~ 30ms.Im ersten Beispiel wird HTML tatsächlich in das eingebettet,
div
während im zweiten Beispiel der Text durch Ersetzen elementbezogener Zeichen durch die entsprechenden Zeichenentitäten ausgeblendet wird, sodass es buchstäblich angezeigt wird (dh das HTML wird nicht gerendert angezeigt ).quelle
.text()
Funktion alle<
durch ersetzt werden<
. Wenn.html()
der Browser also einen Link und etwas Fettdruck.text()
sieht, sieht der Browser alles als Text und erstellt keinen Link oder Fettdruck.Die
text()
Methodenentität entgeht jeglichem HTML-Code, der an sie übergeben wird. Verwendentext()
Sie diese Option, wenn Sie HTML-Code einfügen möchten, der für Personen sichtbar ist, die die Seite anzeigen.Technisch ergibt Ihr zweites Beispiel:
welches im Browser gerendert würde als:
Ihr erstes Beispiel wird als tatsächlicher Link und fett gedruckter Text gerendert.
quelle
Eigentlich sehen beide etwas ähnlich aus, sind aber sehr unterschiedlich. Es hängt von Ihrer Verwendung oder Absicht ab, was Sie erreichen möchten.
Verwendungszweck:
.html()
diese Option, um Container mit HTML-Elementen zu bearbeiten..text()
diese Option, um den Text von Elementen zu ändern, die normalerweise separate offene und schließende Tags habenWo nicht zu verwenden:
.text()
Die Methode kann nicht für Formulareingaben oder Skripte verwendet werden..val()
für Eingabe- oder Textbereichselemente..html()
für den Wert eines Skriptelements.Durch das Aufnehmen von HTML-Inhalten
.text()
werden die HTML-Tags in HTML-Entitäten konvertiert.Unterschied:
.text()
kann sowohl in XML- als auch in HTML-Dokumenten verwendet werden..html()
ist nur für HTML-Dokumente.Überprüfen Sie dieses Beispiel auf jsfiddle, um die Unterschiede in der Aktion zu sehen
Beispiel
quelle
Seltsam, dass niemand den Vorteil der Verhinderung von Cross Site-Skripten von
.text()
über erwähnt hat.html()
(obwohl andere gerade erwähnt haben, dass.text()
die Daten entgehen).Es wird immer empfohlen, diese zu verwenden,
.text()
wenn Sie Daten in DOM aktualisieren möchten, bei denen es sich nur um Daten / Text handelt, die der Benutzer sehen kann..html()
sollte meistens verwendet werden, um den HTML-Inhalt innerhalb eines div zu erhalten.quelle
Verwenden Sie .text (…), wenn Sie den Wert als einfachen Text anzeigen möchten.
Verwenden Sie .html (…), wenn Sie den Wert als HTML-formatierten Text (oder HTML-Inhalt) anzeigen möchten.
Sie sollten auf jeden Fall .text (...) verwenden, wenn Sie nicht sicher sind, ob Ihr Text (z. B. von einem Eingabesteuerelement) keine Zeichen / Tags enthält, die in HTML eine besondere Bedeutung haben. Dies ist sehr wichtig, da dies dazu führen kann, dass der Text nicht richtig angezeigt wird, aber auch dazu, dass ein unerwünschtes JS-Skript-Snippet (z. B. von einer anderen Benutzereingabe) aktiviert wird .
quelle
Grundsätzlich verwendet $ ("# div"). Html element.innerHTML, um Inhalte festzulegen, und $ ("# div"). Text verwendet (wahrscheinlich) element.textContent.
http://docs.jquery.com/Attributes/html :
http://docs.jquery.com/Attributes/text :
quelle
$ ('. div'). html (val) legt die HTML-Werte aller ausgewählten Elemente fest, $ ('. div'). text (val) legt die Textwerte aller ausgewählten Elemente fest.
API-Dokumente für jQuery.text ()
API-Dokumente für jQuery.html ()
Ich würde vermuten, dass sie Node # textContent bzw. Element # innerHTML entsprechen. (Gecko DOM Referenzen).
quelle
Gut in einfachen Worten.
html () - um inneres HTML (HTML-Tags und Text) abzurufen.
text () - um nur Text zu erhalten, wenn er im Inneren vorhanden ist (nur Text)
quelle
Der Unterschied wird
.html()
als HTML ausgewertet,.text()
als Text bewertet .Betrachten Sie einen Block HTML-
HTML
JS
Die Abbildung stammt von diesem Link http://api.jquery.com/text/
quelle
.text()
gibt Ihnen den tatsächlichen Text zwischen HTML-Tags. Zum Beispiel der Absatztext zwischenp
Tags. Interessant ist, dass Sie mit Ihrem$
Selektor den gesamten Text des Elements erhalten, auf das Sie abzielen, sowie den gesamten Text in den untergeordneten Elementen des ausgewählten Elements. Wenn Sie also mehrerep
Tags mit Text im body-Element haben und a ausführen$(body).text()
, erhalten Sie den gesamten Text aus allen Absätzen. (Nur Text, nicht diep
Tags selbst.).html()
gibt Ihnen den Text und die Tags. So erhalten Sie$(body).html()
im Grunde Ihre gesamte Seite HTML-Seite.val()
funktioniert für Elemente, die einvalue
Attribut haben, wie zinput
. Eininput
muss nicht enthalten Text oder HTML und somit.text()
und.html()
wird beides seinnull
fürinput
Elemente.quelle
Ich denke, dass der Unterschied darin besteht, ein HTML-Tag in
text()
Ihr HTML-Tag einzufügen, das nicht funktioniertAusgabe :
Ersetzen
text()
durchhtml()
Ausgabe
dann
<br>
funktioniert das Tag inhtml()
quelle
text()
.Textfunktion setzt oder ruft den Wert als einfachen Text ab, andernfalls setzt oder ruft die HTML-Funktion den Wert als HTML-Tags ab, um dies zu ändern oder zu modifizieren. Wenn Sie nur den Inhalt ändern möchten, verwenden Sie text (). Wenn Sie jedoch das Markup ändern müssen, müssen Sie hmtl () verwenden.
Es ist eine Scheinantwort für mich nach sechs Jahren.
quelle