jQuery:text()和html()之间有什么区别?
jQuery中的text()和html()函数有什么不同?
$("#div").html('<a href="example.html">Link</a><b>hello</b>');
VS
$("#div").text('<a href="example.html">Link</a><b>hello</b>');
我认为差异几乎是不言自明的。 而且这是超级平凡的testing。
在http://jsfiddle.net/hossain/sutvg/上进行现场演示;
<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.html()
将string视为HTML, jQuery.text()
将内容视为文本。
((如有必要请更新,这个答案是Wiki))
子问题:当只有文本,什么是更快, .text()
或.html()
?
答案: .html()
更快! 在这里看到一个“行为testing工具包”的所有问题 。
因此,总而言之, 如果您只有“文本”,请使用html()
方法。
注意:没有意义? 记住.html()
函数只是.innerHTML
一个包装,但在.text()
函数中,jQuery添加了一个“实体filter” ,这个filter自然会消耗时间。
好吧, 如果你真的想要性能 … 使用纯JavaScript来访问直接的文本 – 通过nodeValue
属性进行replace。 基准结论:
- jQuery的
.html()
比.text()
快两倍。 - 纯JS“
.innerHTML
比.html()
快3倍。 - 纯JS的
.nodeValue
比.html()
快50倍,比.text()
100倍,比.innerHTML
20倍。
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());
第一个例子实际上将HTMLembedded到div
而第二个例子将通过用相应的字符实体replace与元素相关的字符以便字面显示(即,HTML将被显示而不呈现)来转义文本。
text()
方法实体 – 转义任何传递给它的HTML。 当你想要插入HTML代码时,使用text()
,那些查看页面的人将会看到它。
从技术上讲,你的第二个例子产生:
<a href="example.html">Link</a><b>hello</b>
这将在浏览器中呈现为:
<a href="example.html">Link</a><b>hello</b>
你的第一个例子将被渲染为一个实际的链接和一些粗体文本。
其实两者看起来有些相似,但是有很大的不同,这取决于你的用途或意图你想达到什么,
在哪里使用:
- 使用
.html()
来操作具有html元素的容器。 - 使用
.text()
修改通常具有单独的开放标签和结束标签的元素的文本
哪里不要用:
-
.text()
方法不能用于表单input或脚本。-
.val()
用于input或textarea元素。 -
.html()
作为脚本元素的值。
-
-
从
.text()
拾取html内容将把html标签转换为html实体。
区别:
-
.text()
可以在XML和HTML文档中使用。 -
.html()
仅适用于html文档。
在jsfiddle上检查这个例子,看看在行动上的差异
例
当您打算将该值显示为简单文本时,请使用.text(…)。
当您打算将值显示为HTML格式的文本(或HTML内容)时,请使用.html(…)。
如果您不确定您的文本(例如来自input控件的文本)是否不包含HTML中具有特殊含义的字符/标签,则应该使用.text(…) 。 这是非常重要的,因为这可能导致文本不能正确显示,但也可能导致不需要的JS脚本片段(例如来自另一个用户input)被激活 。
奇怪的是,没有人提到.text()
的跨站点脚本预防的好处而不是.html()
(虽然其他人刚才提到.text()
转义的数据)。
当你想更新DOM中的数据时,总是推荐使用.text()
,这只是数据/文本供用户查看。
.html()
应该主要用于获取div内的HTML内容。
基本上,$(“#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)将设置所有选定元素的文本值。
jQuery.text()的API文档
jQuery.html()的API文档
我猜他们分别对应Node#textContent和Element#innerHTML 。 (壁虎DOM参考)。
我认为不同的是插入HTML标签text()
你的HTML标签不起作用
$('#output').html('You are registered'+'<br>' +' ' + 'Mister'+' ' + name+' ' + sourname ); }
输出:
You are registered <br> Mister name sourname
用html()
replacetext()
html()
产量
You are registered Mister name sourname
那么标签<br>
在html()
起作用
文本函数设置或以纯文本格式检索值,否则,HTML函数将设置或检索值作为HTML标记进行更改或修改。 如果你只想改变内容,然后使用文本()。 但是,如果你需要改变标记,那么你必须使用hmtl()。
六年后,这对我来说是一个虚拟的答案,别介意。