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() ,那些查看页面的人将会看到它。

从技术上讲,你的第二个例子产生:

 &lt;a href="example.html"&gt;Link&lt;/a&gt;&lt;b&gt;hello&lt;/b&gt; 

这将在浏览器中呈现为:

 <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()。

六年后,这对我来说是一个虚拟的答案,别介意。