@aequalsb Zdaję sobie sprawę, że jest to stare pytanie, ale muszę zauważyć, że domyślnie używanie ´.html () ´ jest niebezpieczne, ponieważ tekst jest traktowany jako HTML. Jeśli otrzymujesz ten tekst z parametru zapytania, formularza, nagłówka, adresu URL lub dowolnego innego miejsca, które ktoś inny niż ty możesz dostarczyć lub edytować, to jesteś otwarty na XSS.
Canis
105
((w razie potrzeby zaktualizuj, ta odpowiedź to Wiki))
Podpytanie: gdy jest tylko tekst, co jest szybsze .text()lub .html()?
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 nodeValuewłaściwość. Wnioski ze wskaźnika:
jQuery's .html()jest ~ 2x szybszy niż .text().
czysty JS .innerHTMLjest ~ 3 razy szybszy niż .html().
czysty JS ' .nodeValuejest ~ 50x szybszy niż .html(), ~ 100x niż .text()i ~ 20x niż .innerHTML.
PS: .textContentwłaściwość została wprowadzona wraz z DOM-Level-3, .nodeValuejest DOM-Level-2 i jest szybsza (!).
Cześć @LinhDam. Hum ... używając pełnego testu porównawczego , mój Firefox mówi „JQ TIMES (3000x): html = 82 text = 254”, „JS TIMES (3000x): html = 15 text = 4” ... A mój Chrome mówi „JQ TIMES (3000x): html = 82 text = 202 "," JS TIMES (3000x): html = 16 text = 0 ".... więc oba (Firefox i Chrome) mają te same przedziały czasowe .
Peter Krauss,
aby być prawdziwym testem porównawczym między text () a html (), selektor powinien zostać wykonany lub getElementById lub $ („# work”) we wszystkich przypadkach, albo będziesz
testował
66
Pierwszy przykład faktycznie osadzi HTML wewnątrz, divpodczas 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 ).
Przepraszam, nie do końca rozumiem. Czy mógłbyś dalej wyjaśnić. Dzięki
Brettk,
Co masz na myśli mówiąc, że drugi przykład „zakoduje”? Już koduje, nie?
Brettk,
@Brettk - Powiedziałem „koduj”, ale to było bardziej poślizgnięcie palców. Zmieniłem odpowiedź, aby lepiej odzwierciedlić to, co mam na myśli.
Andrew Hare,
6
Oznacza to, że w .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.
Mottie
59
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ę.
Ta odpowiedź była najłatwiejsza do zrozumienia i najlepiej sformatowana +1
Katie
Co to jest diff bw :: html (data); i val (dane); @Owais Qureshi
Gem
9
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) .
$ ('. div'). html (val) ustawi wartości HTML wszystkich wybranych elementów, $ ('. div'). text (val) ustawi wartości tekstowe wszystkich wybranych elementów.
Inna jest .html()oceniana jako html, oceniana jako .text()tekst.
Rozważ blok 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()poda ci tekst pomiędzy znacznikami HTML. Na przykład tekst akapitu pomiędzy pznacznikami. 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 pznaczników z tekstem w elemencie body i zrobisz a $(body).text(), otrzymasz cały tekst ze wszystkich akapitów. (Tylko tekst, a nie psame 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ą valueatrybut, takich jak input. An inputnie zawiera tekstu ani HTML, a zatem .text()i .html()będzie zarówno nulldla inputelementów.
Popraw swoją odpowiedź, pierwszy fragment powinien zostać użyty text().
MKaama,
0
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?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 tekstRóżnica, która może nie być tak oczywista, została opisana w dokumentacji interfejsu API jQuery
W dokumentacji .html () :
Oraz w dokumentacji .text () :
źródło
((w razie potrzeby zaktualizuj, ta odpowiedź to Wiki))
Podpytanie: gdy jest tylko tekst, co jest szybsze
.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 :
źródło
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 ).źródło
.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:
które byłyby renderowane w przeglądarce jako:
Twój pierwszy przykład zostanie wyświetlony jako rzeczywisty link i pogrubiony tekst.
źródło
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ąć,
Gdzie używać:
.html()
do obsługi kontenerów z elementami HTML..text()
do modyfikowania tekstu elementów zwykle posiadających osobne tagi otwierające i zamykająceGdzie nie używać:
.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.Różnica:
.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
Przykład
źródło
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.źródło
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) .
źródło
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 :
http://docs.jquery.com/Attributes/text :
źródło
$ ('. 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).
źródło
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)
źródło
Inna jest
.html()
oceniana jako html, oceniana jako.text()
tekst.Rozważ blok HTML
HTML
JS
Ilustracja pochodzi z tego linku http://api.jquery.com/text/
źródło
.text()
poda ci tekst pomiędzy znacznikami HTML. Na przykład tekst akapitu pomiędzyp
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 wielep
znaczników z tekstem w elemencie body i zrobisz a$(body).text()
, otrzymasz cały tekst ze wszystkich akapitów. (Tylko tekst, a niep
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 jakinput
. Aninput
nie zawiera tekstu ani HTML, a zatem.text()
i.html()
będzie zarównonull
dlainput
elementów.źródło
Myślę, że różnica polega na tym, że wstawienie tagu html w
text()
tobie nie działawynik :
zastępując
text()
zhtml()
wynik
wtedy tag
<br>
działahtml()
źródło
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.
źródło