Odpowiedzi:
Myślę, że różnica jest prawie oczywista. Testowanie jest bardzo trywialne.
jQuery.html()
traktuje ciąg znaków jak HTML, jQuery.text()
traktuje treść jak tekst
<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>
Różnica, która może nie być tak oczywista, została opisana w dokumentacji interfejsu API jQuery
W dokumentacji .html () :
Ta
.html()
metoda nie jest dostępna w dokumentach XML.
Oraz w dokumentacji .text () :
W przeciwieństwie do
.html()
metody,.text()
może być stosowany zarówno w dokumentach XML, jak i HTML.
$(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>
((w razie potrzeby zaktualizuj, ta odpowiedź to Wiki))
.text()
lub .html()
?Odpowiedź: .html()
jest szybszy! Zobacz tutaj „zestaw testów zachowania” dla wszystkich pytań .
Podsumowując, jeśli masz „tylko tekst”, użyj html()
metody.
Uwaga: to nie ma sensu? Pamiętaj, że .html()
funkcja jest tylko opakowaniem .innerHTML
, ale w .text()
funkcji jQuery dodaje „filtr jednostek” , a ten filtr naturalnie zajmuje czas.
Ok, jeśli naprawdę chcesz wydajności ... Użyj czystego Javascript, aby uzyskać dostęp do bezpośredniej zamiany tekstu na nodeValue
właściwość. Wnioski ze wskaźnika:
.html()
jest ~ 2x szybszy niż .text()
..innerHTML
jest ~ 3 razy szybszy niż .html()
..nodeValue
jest ~ 50x szybszy niż .html()
, ~ 100x niż .text()
i ~ 20x niż .innerHTML
.PS: .textContent
właściwość została wprowadzona wraz z DOM-Level-3, .nodeValue
jest DOM-Level-2 i jest szybsza (!).
Zobacz ten pełny test porównawczy :
// 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
właściwości przekształca „>” w „& lt;” itd.
.text()
wydaje się około 7 razy szybszy niż .html()
). Kod źródłowy: codepen.io/damhonglinh/pen/vGpQEO . Testowałem z 1500 elementami; .html()
zajęło ~ 220ms i .text()
zajęło ~ 30ms.
Pierwszy przykład faktycznie osadzi HTML wewnątrz, div
podczas gdy drugi przykład ucieknie od tekstu poprzez zastąpienie znaków związanych z elementem odpowiednimi jednostkami znakowymi, aby wyświetlał się dosłownie (tzn. HTML nie będzie wyświetlany ).
.text()
funkcji wszystko <
zostanie zastąpione przez <
. Tak więc .html()
w przeglądarce zobaczysz link i pogrubiony tekst, a .text()
przeglądarka zobaczy wszystko jako tekst i nie utworzy linku ani pogrubionego tekstu.
text()
Metoda jednostka-ucieka dowolny kod HTML, który jest przekazywany do niego. Użyj, text()
jeśli chcesz wstawić kod HTML, który będzie widoczny dla osób przeglądających stronę.
Technicznie twój drugi przykład daje:
<a href="example.html">Link</a><b>hello</b>
które byłyby renderowane w przeglądarce jako:
<a href="example.html">Link</a><b>hello</b>
Twój pierwszy przykład zostanie wyświetlony jako rzeczywisty link i pogrubiony tekst.
W rzeczywistości oba wyglądają nieco podobnie, ale są zupełnie różne, zależy to od sposobu użycia lub zamiaru, co chcesz osiągnąć,
.html()
do obsługi kontenerów z elementami HTML..text()
do modyfikowania tekstu elementów zwykle posiadających osobne tagi otwierające i zamykające.text()
Metoda nie może być używana w danych wejściowych formularza lub skryptach.
.val()
dla elementów wejściowych lub textarea..html()
dla wartości elementu skryptu.Pobieranie zawartości HTML .text()
zamieni tagi HTML w encje HTML.
.text()
może być stosowany zarówno w dokumentach XML, jak i HTML..html()
dotyczy tylko dokumentów HTML.Sprawdź ten przykład na jsfiddle, aby zobaczyć różnice w działaniu
Dziwne, że nikt nie wspomniał o zapobieganie scripting korzyści Cross Site of .text()
over .html()
(Chociaż inni tylko wspomnieć, że .text()
ucieka danych).
Zawsze zaleca się stosowanie, .text()
gdy chcesz aktualizować dane w DOM, które są tylko danymi / tekstem dla użytkownika.
.html()
powinny być najczęściej używane do uzyskania treści HTML w div.
Użyj .text (…), jeśli chcesz wyświetlać wartość jako zwykły tekst.
Użyj .html (…), jeśli chcesz wyświetlać wartość jako tekst w formacie HTML (lub treść HTML).
Zdecydowanie powinieneś użyć .text (...), jeśli nie masz pewności, że twój tekst (np. Pochodzący z kontrolki wprowadzania) nie zawiera znaków / znaczników, które mają specjalne znaczenie w HTML. Jest to naprawdę ważne, ponieważ może to spowodować, że tekst nie będzie wyświetlany poprawnie, ale może również spowodować aktywację niechcianego fragmentu skryptu JS (np. Pochodzącego od danych wprowadzonych przez innego użytkownika) .
Zasadniczo $ („# div”). Html używa element.innerHTML do ustawiania zawartości, a $ („# div”). Text (prawdopodobnie) używa 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) ustawi wartości HTML wszystkich wybranych elementów, $ ('. div'). text (val) ustawi wartości tekstowe wszystkich wybranych elementów.
Dokumenty API dla jQuery.text ()
Dokumenty API dla jQuery.html ()
Domyślam się, że odpowiadają one odpowiednio Node # textContent i Element # innerHTML . (Referencje DOM Gecko).
Cóż w prostym znaczeniu.
html () - aby uzyskać wewnętrzny HTML (tagi HTML i tekst).
text () - aby uzyskać tylko tekst, jeśli jest obecny w środku (tylko tekst)
Inna jest .html()
oceniana jako html, oceniana jako .text()
tekst.
Rozważ blok 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'
Ilustracja pochodzi z tego linku http://api.jquery.com/text/
.text()
poda ci tekst pomiędzy znacznikami HTML. Na przykład tekst akapitu pomiędzy p
znacznikami. Co ciekawe, da ci cały tekst w elemencie, na który celujesz za pomocą $
selektora, oraz cały tekst w elementach potomnych tego wybranego elementu. Więc jeśli masz wiele p
znaczników z tekstem w elemencie body i zrobisz a $(body).text()
, otrzymasz cały tekst ze wszystkich akapitów. (Tylko tekst, a nie p
same tagi).
.html()
da ci tekst i tagi. Więc w $(body).html()
zasadzie da ci całą stronę HTML
.val()
działa dla elementów, które mają value
atrybut, takich jak input
. An input
nie zawiera tekstu ani HTML, a zatem .text()
i .html()
będzie zarówno null
dla input
elementów.
Myślę, że różnica polega na tym, że wstawienie tagu html w text()
tobie nie działa
$('#output').html('You are registered'+'<br>' +' '
+ 'Mister'+' ' + name+' ' + sourname ); }
wynik :
You are registered <br> Mister name sourname
zastępując text()
zhtml()
wynik
You are registered
Mister name sourname
wtedy tag <br>
działahtml()
text()
.
funkcja tekstowa ustawia lub pobiera wartość jako zwykły tekst, w przeciwnym razie funkcja HTML ustawia lub pobiera wartość jako znaczniki HTML, aby to zmienić lub zmodyfikować. Jeśli chcesz po prostu zmienić treść, użyj text (). Ale jeśli musisz zmienić znaczniki, musisz użyć hmtl ().
To dla mnie fałszywa odpowiedź po sześciu latach, nieważne.
text()
metoda jest szybsza? Ile?