Какая разница между функциями text() и html() в jQuery?
$("#div").html('<a href="example.html">Link</a><b>hello</b>');
против
$("#div").text('<a href="example.html">Link</a><b>hello</b>');
Какая разница между функциями text() и html() в jQuery?
$("#div").html('<a href="example.html">Link</a><b>hello</b>');
против
$("#div").text('<a href="example.html">Link</a><b>hello</b>');
Я думаю, что разница почти самоочевидна. И это супер тривиально для тестирования.
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>
Различие, которое может быть не столь очевидным, описано в документации по API jQuery.
В документации по .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>
((пожалуйста, обновите, если необходимо, этот ответ - Wiki))
.text()
или .html()
? Ответ: .html()
быстрее! См. здесь "тестовый комплект поведения" для всего вопроса.
Итак, в заключение, , если у вас есть "только текст", используйте метод html()
.
Примечание: Не имеет смысла? Помните, что функция .html()
является только оболочкой для .innerHTML
, но в функции .text()
jQuery добавляет "фильтр сущности", и этот фильтр естественно потребляет время.
Хорошо, , если вам действительно нужна производительность... Использовать чистый Javascript для доступа к прямой текстовой замене с помощью свойства nodeValue
.
Контрольные выводы:
.html()
~ 2x быстрее, чем .text()
..innerHTML
~ 3 раза быстрее, чем .html()
..nodeValue
составляет ~ 50 раз быстрее, чем .html()
, ~ 100x чем .text()
и ~ 20x чем .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());
Первый пример будет фактически вставлять HTML в div
, тогда как второй пример выйдет из текста с помощью замены символов, связанных с элементами, с их соответствующим символом сущности, чтобы он отображался буквально (т.е. HTML будет отображаться не отображаемым).
Сущность метода 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()
для значения элемента script.Получение html-содержимого из .text()
преобразует html-теги в html-объекты.
.text()
может использоваться как в документах XML, так и HTML..html()
предназначен только для html-документов.Проверьте этот пример на jsfiddle, чтобы увидеть различия в действии
Странно, что никто не упомянул преимущества предотвращения перекрестных ссылок на .text()
более .html()
(хотя другие только что упоминали, что .text()
избегает данных).
Всегда рекомендуется использовать .text()
, если вы хотите обновлять данные в DOM, которые представляют собой только данные/текст для просмотра пользователем.
.html()
должен в основном использоваться для получения содержимого HTML в div.
Используйте .text(...), когда вы собираетесь отображать значение как простой текст.
Используйте .html(...), когда вы собираетесь отображать это значение в виде HTML-форматированного текста (или содержимого HTML).
Вы должны определенно использовать .text(...), когда вы не уверены, что ваш текст (например, входящий из элемента управления вводом) не содержит символов/тегов, которые имеют особое значение в HTML. Это действительно важно, потому что это может привести к тому, что текст не будет отображаться правильно, но также может привести к тому, что нежелательный JS script фрагмент (например, приход с другого пользовательского ввода) будет активирован.
В принципе, $( "# 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).
Ну, в простом смысле.
html() - получить внутренний html (теги html и текст).
text() - чтобы получить только текст, если присутствует внутри (только текст)
$('. div'). html (val) будет устанавливать значения HTML для всех выбранных элементов, $('. div'). text (val) будет устанавливать текстовые значения для всех выбранных элементов.
API-документы для jQuery.text()
API-документы для jQuery.html()
Я бы предположил, что они соответствуют Node #textContent и Элемент # innerHTML, соответственно. (Ссылки DOC Gecko).
Я думаю, что разница заключается в вставке 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()
текстовая функция задает или извлекает значение в виде обычного текста, в противном случае функция HTML задает или извлекает значение в качестве HTML-тегов для изменения или изменения этого. Если вы хотите просто изменить содержимое, используйте текст(). Но если вам нужно изменить разметку, вы должны использовать hmtl().
Это фиктивный ответ для меня через шесть лет, не против.
.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
. Интересно отметить, что он даст вам весь текст в элементе, на который вы нацеливаетесь с помощью вашего $
selector, плюс весь текст в дочерних элементах этого выбранного элемента. Так что, если у вас есть несколько тегов p
с текстом внутри элемента body и вы делаете $(body).text()
, вы получите весь текст из всех абзацев. (Только текст, а не сами теги p
.)
.html()
даст вам текст и теги. Таким образом, $(body).html()
основном даст вам всю HTML-страницу вашей страницы.
.val() работает для элементов, имеющих атрибут value, таких как input. Входные данные не содержат текст или HTML, поэтому .text() и .html() оба будут нулевыми для элементов ввода.