Ответы:
Я думаю, что разница почти самоочевидна. И это супер тривиально для тестирования.
jQuery.html()
обрабатывает строку как HTML, jQuery.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>
Различие, которое может быть не столь очевидным, описано в документации по jQuery API.
В документации для .html () :
.html()
Метод не доступен в XML - документах.
И в документации по .text () :
В отличие от
.html()
метода,.text()
может использоваться как в XML, так и в 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>
((пожалуйста, обновите при необходимости, этот ответ вики)
.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 и быстрее (!).
Смотрите этот полный тест :
// 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
свойство, оно преобразует «>» в «& lt;» и т. Д.
.text()
кажется, в 7 раз быстрее, чем .html()
). Исходный код: codepen.io/damhonglinh/pen/vGpQEO . Я проверил с 1500 элементов; .html()
заняло ~ 220 мс и .text()
заняло ~ 30 мс.
Первый пример на самом деле будет вставлять HTML внутри, div
тогда как второй пример будет экранировать текст путем замены связанных с элементом символов соответствующими им символьными объектами, чтобы он отображался буквально (т. Е. HTML будет отображаться без визуализации).
.text()
функции все <
будет заменено на <
. Таким образом, .html()
в браузере будет отображаться ссылка и некоторый жирный текст, при .text()
этом браузер будет видеть все как текст, а не создавать ссылку или жирный текст.
text()
Метод сущность-ускользает любой HTML , который передается в него. Используйте, text()
когда вы хотите вставить HTML-код, который будет виден людям, которые просматривают страницу.
Технически, ваш второй пример производит:
<a href="example.html">Link</a><b>hello</b>
который будет отображаться в браузере как:
<a href="example.html">Link</a><b>hello</b>
Ваш первый пример будет отображен как фактическая ссылка и текст, выделенный жирным шрифтом.
На самом деле оба выглядят несколько похожими, но совершенно разные, это зависит от вашего использования или намерения, чего вы хотите достичь,
.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 :
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) установит значения 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
<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'
Иллюстрация по этой ссылке http://api.jquery.com/text/
.text()
даст вам фактический текст между тегами HTML. Например, текст абзаца междуp
тегами. Интересно отметить, что он даст вам весь текст в элементе, на который вы нацеливаетесь с помощью вашего $
селектора, плюс весь текст в дочерних элементах этого выбранного элемента. Так что, если у вас есть несколько p
тегов с текстом внутри элемента body, и вы делаете $(body).text()
, вы получите весь текст из всех абзацев. (Только текст, а не p
сами теги.)
.html()
даст вам текст и теги. Так $(body).html()
что в основном даст вам всю страницу HTML-страницу
.val()
работает для элементов, которые имеют value
атрибут, например input
. An input
не содержит текст или HTML и, следовательно, .text()
и.html()
оба будут null
для input
элементов.
Я думаю, что разница в том, чтобы вставить тег HTML в text()
вас тег HTML не функционирует
$('#output').html('You are registered'+'<br>' +' '
+ 'Mister'+' ' + name+' ' + sourname ); }
вывод :
You are registered <br> Mister name sourname
заменить text()
наhtml()
вывод
You are registered
Mister name sourname
тогда тег <br>
работает вhtml()
text()
.
текстовая функция устанавливает или извлекает значение в виде обычного текста, в противном случае функция HTML устанавливает или извлекает значение в виде HTML-тегов, чтобы изменить или изменить его. Если вы хотите просто изменить содержимое, используйте text (). Но если вам нужно изменить разметку, вы должны использовать hmtl ().
Это глупый ответ для меня после шести лет, не против.
text()
метод быстрее ?? Сколько?