@aequalsb Я признаю, что это старый вопрос сейчас, но я должен заметить, что использование «.html ()» по умолчанию опасно из-за того, что текст обрабатывается как HTML. Если вы получите этот текст из параметра строки запроса, формы, заголовка, URL-адреса или любого другого места, которое кто-либо другой, кроме вас, может предоставить или отредактировать текст, тогда вы широко открыты для XSS.
Canis
105
((пожалуйста, обновите при необходимости, этот ответ вики)
Подвопрос: когда только текст, что быстрее .text()или .html()?
Итак, в заключение, если у вас есть «только текст», используйте html()метод.
Примечание: не имеет смысла? Помните, что .html()функция является только оболочкой .innerHTML, но в .text()функцию jQuery добавляет «фильтр сущностей» , и этот фильтр, естественно, потребляет время.
Хорошо, если вы действительно хотите производительность ... Используйте чистый Javascript для доступа к прямой замене текста nodeValueсвойством. Контрольные выводы:
JQuery в .html()~ 2 раза быстрее, чем .text().
чистый JS ' .innerHTMLв 3 раза быстрее чем .html().
чистый JS ' .nodeValueв 50 раз быстрее .html(), в 100 раз .text()и в 20 раз .innerHTML.
PS: .textContentсвойство было введено с DOM-Level-3, .nodeValueявляется DOM-Level-2 и быстрее (!).
Но если вы имеете дело с ненадежным вводом, вы должны использовать text (), когда это возможно.
Скотт Симонтис
@ScottSimontis, когда вы устанавливаете nodeValueсвойство, оно преобразует «>» в «& lt;» и т. Д.
Питер Краусс
Когда я выполняю «тестирование» с помощью Chrome DevTools ( developer.chrome.com/devtools/docs/timeline ), результат получается противоположным ( .text()кажется, в 7 раз быстрее, чем .html()). Исходный код: codepen.io/damhonglinh/pen/vGpQEO . Я проверил с 1500 элементов; .html()заняло ~ 220 мс и .text()заняло ~ 30 мс.
Линь Дам
Привет @LinhDam. Хм ... используя полный тест , мой Firefox говорит "JQ TIMES (3000x): html = 82 text = 254", "JS TIMES (3000x): html = 15 text = 4" ... И мой Chrome говорит "JQ TIMES (3000x): html = 82 text = 202 "," JS TIMES (3000x): html = 16 text = 0 ".... поэтому оба (Firefox и Chrome) имеют одинаковые коэффициенты времени .
Питер Краусс
чтобы быть реальным эталоном между text () и html (), селектор должен быть сделан или getElementById или $ ("# work") во всех случаях, или вы будете сравнивать также $ ("# work") с getElementById
Octavioamu
66
Первый пример на самом деле будет вставлять HTML внутри, divтогда как второй пример будет экранировать текст путем замены связанных с элементом символов соответствующими им символьными объектами, чтобы он отображался буквально (т. Е. HTML будет отображаться без визуализации).
Извините, я не совсем понимаю. Не могли бы вы дополнительно объяснить. Спасибо
Бреттк
Что вы имеете в виду, что второй пример будет «кодировать»? Это уже кодировка, нет?
Бретк
@Brettk - я сказал «закодировать», но это было скорее скольжение пальцев. Я изменил свой ответ, чтобы лучше отразить то, что я имею в виду.
Эндрю Заяц
6
Он означает, что в .text()функции все <будет заменено на <. Таким образом, .html()в браузере будет отображаться ссылка и некоторый жирный текст, при .text()этом браузер будет видеть все как текст, а не создавать ссылку или жирный текст.
Мотти
59
text()Метод сущность-ускользает любой HTML , который передается в него. Используйте, text()когда вы хотите вставить HTML-код, который будет виден людям, которые просматривают страницу.
Этот ответ был самым простым для понимания и лучше отформатирован +1
Кэти
Что такое diff bw :: html (data); & val (данные); @ Оваис Куреши
камень
9
Странно , что никто не упомянул предотвращение сценариев выгоды Cross Сайта .text()над .html()(Хотя другими только что говорил , что .text()ускользает данные).
Всегда рекомендуется использовать, .text()когда вы хотите обновить данные в DOM, которые являются просто данными / текстом для просмотра пользователем.
.html() должен использоваться в основном для получения содержимого HTML внутри div.
Используйте .text (…), когда вы хотите отобразить значение в виде простого текста.
Используйте .html (…), если вы хотите отобразить значение в виде текста в формате html (или содержимого HTML).
Вам определенно следует использовать .text (...), когда вы не уверены, что ваш текст (например, поступающий из элемента управления вводом) не содержит символов / тегов, которые имеют особое значение в HTML. Это действительно важно, потому что это может привести к тому, что текст не будет отображаться должным образом, но это также может привести к активации нежелательного фрагмента сценария JS (например, поступающего из другого пользовательского ввода) .
$ ('. div'). html (val) установит значения HTML всех выбранных элементов, $ ('. div'). text (val) установит текстовые значения всех выбранных элементов.
Разное .html()оценивать как HTML, оценивать как .text()текст.
Рассмотрим блок 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()даст вам фактический текст между тегами HTML. Например, текст абзаца междуp тегами. Интересно отметить, что он даст вам весь текст в элементе, на который вы нацеливаетесь с помощью вашего $селектора, плюс весь текст в дочерних элементах этого выбранного элемента. Так что, если у вас есть несколько pтегов с текстом внутри элемента body, и вы делаете $(body).text(), вы получите весь текст из всех абзацев. (Только текст, а не pсами теги.)
.html()даст вам текст и теги. Так $(body).html()что в основном даст вам всю страницу HTML-страницу
.val()работает для элементов, которые имеют valueатрибут, например input. An inputне содержит текст или HTML и, следовательно, .text()и.html() оба будут nullдля inputэлементов.
Пожалуйста, исправьте свой ответ, первый фрагмент должен использовать text().
MKaama
0
текстовая функция устанавливает или извлекает значение в виде обычного текста, в противном случае функция HTML устанавливает или извлекает значение в виде HTML-тегов, чтобы изменить или изменить его. Если вы хотите просто изменить содержимое, используйте text (). Но если вам нужно изменить разметку, вы должны использовать hmtl ().
Это глупый ответ для меня после шести лет, не против.
text()
метод быстрее ?? Сколько?Ответы:
Я думаю, что разница почти самоочевидна. И это супер тривиально для тестирования.
jQuery.html()
обрабатывает строку как HTML,jQuery.text()
обрабатывает содержимое как текстРазличие, которое может быть не столь очевидным, описано в документации по jQuery API.
В документации для .html () :
И в документации по .text () :
источник
((пожалуйста, обновите при необходимости, этот ответ вики)
Подвопрос: когда только текст, что быстрее
.text()
или.html()
?Ответ:
.html()
быстрее! См. Здесь «набор тестов поведения» для всех вопросов .Итак, в заключение, если у вас есть «только текст», используйте
html()
метод.Примечание: не имеет смысла? Помните, что
.html()
функция является только оболочкой.innerHTML
, но в.text()
функцию jQuery добавляет «фильтр сущностей» , и этот фильтр, естественно, потребляет время.Хорошо, если вы действительно хотите производительность ... Используйте чистый Javascript для доступа к прямой замене текста
nodeValue
свойством. Контрольные выводы:.html()
~ 2 раза быстрее, чем.text()
..innerHTML
в 3 раза быстрее чем.html()
..nodeValue
в 50 раз быстрее.html()
, в 100 раз.text()
и в 20 раз.innerHTML
.PS:
.textContent
свойство было введено с DOM-Level-3,.nodeValue
является DOM-Level-2 и быстрее (!).Смотрите этот полный тест :
источник
nodeValue
свойство, оно преобразует «>» в «& lt;» и т. Д..text()
кажется, в 7 раз быстрее, чем.html()
). Исходный код: codepen.io/damhonglinh/pen/vGpQEO . Я проверил с 1500 элементов;.html()
заняло ~ 220 мс и.text()
заняло ~ 30 мс.Первый пример на самом деле будет вставлять HTML внутри,
div
тогда как второй пример будет экранировать текст путем замены связанных с элементом символов соответствующими им символьными объектами, чтобы он отображался буквально (т. Е. HTML будет отображаться без визуализации).источник
.text()
функции все<
будет заменено на<
. Таким образом,.html()
в браузере будет отображаться ссылка и некоторый жирный текст, при.text()
этом браузер будет видеть все как текст, а не создавать ссылку или жирный текст.text()
Метод сущность-ускользает любой HTML , который передается в него. Используйте,text()
когда вы хотите вставить HTML-код, который будет виден людям, которые просматривают страницу.Технически, ваш второй пример производит:
который будет отображаться в браузере как:
Ваш первый пример будет отображен как фактическая ссылка и текст, выделенный жирным шрифтом.
источник
На самом деле оба выглядят несколько похожими, но совершенно разные, это зависит от вашего использования или намерения, чего вы хотите достичь,
Где использовать:
.html()
для работы с контейнерами, содержащими элементы html..text()
для изменения текста элементов, обычно имеющих отдельные открывающие и закрывающие тегиГде не использовать:
.text()
метод не может быть использован для ввода данных или сценариев..val()
для ввода или элементов textarea..html()
для значения элемента скрипта.При получении html-контента
.text()
html-теги преобразуются в html-объекты.Разница:
.text()
может использоваться как в XML, так и в HTML документах..html()
только для HTML-документов.Проверьте этот пример на jsfiddle, чтобы увидеть различия в действии
пример
источник
Странно , что никто не упомянул предотвращение сценариев выгоды Cross Сайта
.text()
над.html()
(Хотя другими только что говорил , что.text()
ускользает данные).Всегда рекомендуется использовать,
.text()
когда вы хотите обновить данные в DOM, которые являются просто данными / текстом для просмотра пользователем..html()
должен использоваться в основном для получения содержимого HTML внутри div.источник
Используйте .text (…), когда вы хотите отобразить значение в виде простого текста.
Используйте .html (…), если вы хотите отобразить значение в виде текста в формате html (или содержимого HTML).
Вам определенно следует использовать .text (...), когда вы не уверены, что ваш текст (например, поступающий из элемента управления вводом) не содержит символов / тегов, которые имеют особое значение в HTML. Это действительно важно, потому что это может привести к тому, что текст не будет отображаться должным образом, но это также может привести к активации нежелательного фрагмента сценария JS (например, поступающего из другого пользовательского ввода) .
источник
По сути, $ ("# div"). Html использует element.innerHTML для установки содержимого, а $ ("# div"). Text (возможно) использует element.textContent.
http://docs.jquery.com/Attributes/html :
http://docs.jquery.com/Attributes/text :
источник
$ ('. div'). html (val) установит значения HTML всех выбранных элементов, $ ('. div'). text (val) установит текстовые значения всех выбранных элементов.
Документы API для jQuery.text ()
Документы API для jQuery.html ()
Я предполагаю, что они соответствуют Node # textContent и Element # innerHTML соответственно. (Ссылки Gecko DOM).
источник
Ну, в простом смысле.
html () - получить внутренний html (теги html и текст).
text () - чтобы получить только текст, если присутствует внутри (только текст)
источник
Разное
.html()
оценивать как HTML, оценивать как.text()
текст.Рассмотрим блок HTML
HTML
JS
Иллюстрация по этой ссылке http://api.jquery.com/text/
источник
.text()
даст вам фактический текст между тегами HTML. Например, текст абзаца междуp
тегами. Интересно отметить, что он даст вам весь текст в элементе, на который вы нацеливаетесь с помощью вашего$
селектора, плюс весь текст в дочерних элементах этого выбранного элемента. Так что, если у вас есть несколькоp
тегов с текстом внутри элемента body, и вы делаете$(body).text()
, вы получите весь текст из всех абзацев. (Только текст, а неp
сами теги.).html()
даст вам текст и теги. Так$(body).html()
что в основном даст вам всю страницу HTML-страницу.val()
работает для элементов, которые имеютvalue
атрибут, напримерinput
. Aninput
не содержит текст или HTML и, следовательно,.text()
и.html()
оба будутnull
дляinput
элементов.источник
Я думаю, что разница в том, чтобы вставить тег HTML в
text()
вас тег HTML не функционируетвывод :
заменить
text()
наhtml()
вывод
тогда тег
<br>
работает вhtml()
источник
text()
.текстовая функция устанавливает или извлекает значение в виде обычного текста, в противном случае функция HTML устанавливает или извлекает значение в виде HTML-тегов, чтобы изменить или изменить его. Если вы хотите просто изменить содержимое, используйте text (). Но если вам нужно изменить разметку, вы должны использовать hmtl ().
Это глупый ответ для меня после шести лет, не против.
источник