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 Text
<html>
<head>
<title>Test Page</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$("#div1").html('<a href="example.html">Link</a><b>hello</b>');
$("#div2").text('<a href="example.html">Link</a><b>hello</b>');
});
</script>
</head>
<body>
<div id="div1"></div>
<div id="div2"></div>
</body>
</html>
Ein Unterschied, der möglicherweise nicht so offensichtlich ist, wird in der Dokumentation zur jQuery-API beschrieben
In der Dokumentation zu .html () :
Die
.html()
Methode ist in XML-Dokumenten nicht verfügbar.
Und in der Dokumentation zu .text () :
Kann im Gegensatz zur
.html()
Methode.text()
sowohl in XML- als auch in HTML-Dokumenten verwendet werden.
$(function() {
$("#div1").html('<a href="example.html">Link</a><b>hello</b>');
$("#div2").text('<a href="example.html">Link</a><b>hello</b>');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<div id="div1"></div>
<div id="div2"></div>
((bitte bei Bedarf aktualisieren, diese Antwort ist ein Wiki))
.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 :
// Using jQuery:
simplecron.restart(); for (var i=1; i<3000; i++)
$("#work").html('BENCHMARK WORK');
var ht = simplecron.duration();
simplecron.restart(); for (var i=1; i<3000; i++)
$("#work").text('BENCHMARK WORK');
alert("JQuery (3000x): \nhtml="+ht+"\ntext="+simplecron.duration());
// Using pure JavaScript only:
simplecron.restart(); for (var i=1; i<3000; i++)
document.getElementById('work').innerHTML = 'BENCHMARK WORK';
ht = simplecron.duration();
simplecron.restart(); for (var i=1; i<3000; i++)
document.getElementById('work').nodeValue = 'BENCHMARK WORK';
alert("Pure JS (3000x):\ninnerHTML="+ht+"\nnodeValue="+simplecron.duration());
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 ).
.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. Verwenden text()
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:
<a href="example.html">Link</a><b>hello</b>
welches im Browser gerendert würde als:
<a href="example.html">Link</a><b>hello</b>
Ihr erstes Beispiel wird als tatsächlicher Link und fett gedruckter Text gerendert.
Eigentlich sehen beide etwas ähnlich aus, sind aber sehr unterschiedlich. Es hängt von Ihrer Verwendung oder Absicht ab, was Sie erreichen möchten.
.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 haben.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.
.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
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.
http://docs.jquery.com/Attributes/html :
Set the html contents of every matched element
http://docs.jquery.com/Attributes/text :
Similar to html(), but escapes HTML (replace "<" and ">" with their HTML
entities).
$ ('. 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).
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)
Der Unterschied wird .html()
als HTML ausgewertet, .text()
als Text bewertet .
Betrachten Sie einen Block HTML-
HTML
<div id="mydiv">
<div class="mydiv">
This is a div container
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">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'
Die Abbildung stammt von diesem Link http://api.jquery.com/text/
.text()
gibt Ihnen den tatsächlichen Text zwischen HTML-Tags. Zum Beispiel der Absatztext zwischen p
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 mehrere p
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 die p
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 ein value
Attribut haben, wie z input
. Ein input
muss nicht enthalten Text oder HTML und somit .text()
und .html()
wird beides sein null
für input
Elemente.
Ich denke, dass der Unterschied darin besteht, ein HTML-Tag in text()
Ihr HTML-Tag einzufügen, das nicht funktioniert
$('#output').html('You are registered'+'<br>' +' '
+ 'Mister'+' ' + name+' ' + sourname ); }
Ausgabe :
You are registered <br> Mister name sourname
Ersetzen text()
durchhtml()
Ausgabe
You are registered
Mister name sourname
dann <br>
funktioniert das Tag inhtml()
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.
text()
Methode schneller? Wie viel?