ChatGPT解决这个技术问题 Extra ChatGPT

jQuery: text() 和 html() 有什么区别?

jQuery 中的 text() 和 html() 函数有什么区别?

$("#div").html('<a href="example.html">Link</a><b>hello</b>');

对比

$("#div").text('<a href="example.html">Link</a><b>hello</b>');

W
WizKaleeb

我认为差异几乎是不言自明的。而且测试起来非常简单。

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('链接hello'); $("#div2") .text('链接你好'); });

http://jsfiddle.net/hossain/sUTVg/


还应该注意的是,两者的长度也不同。 jsfiddle.net/sUTVg/458
@aequalsb 我现在认识到这是一个老问题,但我必须指出,默认使用“.html()”是危险的,因为文本被视为 HTML。如果您从查询字符串参数、表单、标题、URL 或任何其他人无法提供或编辑文本的地方获取该文本,那么您对 XSS 敞开了大门。
7
7 revs, 4 users 77%

(((如有必要请更新,这个答案是维基))

子问题:当只有文本时,.text() 或 .html() 哪个更快?

答案: .html() 更快!请参阅here a "behaviour test-kit" for all the question

因此,总而言之,如果您“只有文本”,请使用 html() 方法。

注意:没有意义?请记住,.html() 函数只是 .innerHTML 的一个包装器,但 jQuery 在 .text() 函数中添加了一个“实体过滤器”,这个过滤器自然会消耗时间。

好的,如果您真的想要性能...使用纯 Javascript 通过 nodeValue 属性访问直接文本替换。基准结论:

jQuery 的 .html() 比 .text() 快约 2 倍。

纯 JS 的 .innerHTML 比 .html() 快约 3 倍。

纯 JS 的 .nodeValue 比 .html() 快约 50 倍,比 .text() 快约 100 倍,比 .innerHTML 快约 20 倍。

PS:.textContent 属性是在 DOM-Level-3 中引入的,.nodeValue 是 DOM-Level-2 并且更快(!)。

请参阅this complete benchmark

// 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());

但是,如果处理不受信任的输入,则应尽可能使用 text() 。
@ScottSimontis 当您设置 nodeValue 属性时,它会转换“>”变成“<”等
当我使用 Chrome DevTools (developer.chrome.com/devtools/docs/timeline) 进行“基准测试”时,结果是相反的(.text() 似乎比 .html() 快约 7 倍)。源代码:codepen.io/damhonglinh/pen/vGpQEO。我用 1500 个元素进行了测试; .html() 耗时约 220 毫秒,.text() 耗时约 30 毫秒。
嗨@LinhDam。嗯...使用 the complete benchmark,我的 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 进行基准测试
A
Andrew Hare

第一个示例实际上将 HTML 嵌入到 div 中,而第二个示例将通过用相应的 character entities 替换与元素相关的字符来转义文本,以便它按字面显示(即 HTML 将被 显示< /em> 未渲染)。


对不起,我不太明白。你能否进一步解释一下。谢谢
你是什么意思第二个例子将“编码”?它已经编码了,不是吗?
@Brettk - 我说的是“编码”,但这更像是指手画脚。我更改了答案以更好地反映我的意思。
他的意思是在.text()函数中,所有的<都会被替换为&lt;。因此,使用 .html() 浏览器将看到一个链接和一些粗体文本,使用 .text() 浏览器会将所有内容都视为文本,而不是创建链接或粗体文本。
d
davidcl

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>

您的第一个示例将呈现为实际链接和一些粗体文本。


这应该包含在所选答案中,以解释实际情况。
O
Owais Qureshi

实际上两者看起来确实有些相似,但完全不同,这取决于您的用途或您想要实现的意图,

在哪里使用:

使用 .html() 对具有 html 元素的容器进行操作。

使用 .text() 修改通常具有单独的开始和结束标签的元素的文本

不使用的地方:

.text() 方法不能用于表单输入或脚本。 .val() 用于输入或文本区域元素。 .html() 用于脚本元素的值。

.val() 用于输入或文本区域元素。

.html() 用于脚本元素的值。

从 .text() 中提取 html 内容会将 html 标签转换为 html 实体。

区别:

.text() 可用于 XML 和 HTML 文档。

.html() 仅适用于 html 文档。

在 jsfiddle 上查看此示例以查看操作上的差异

例子


这个答案是最容易理解且格式最好的 +1
什么是 diff bw :: html(data); & 验证(数据); @Owais Qureshi
N
Nisse Engström

奇怪的是,没有人提到 .text() 优于 .html() 的跨站点脚本预防优势(尽管其他人刚刚提到 .text() 会转义数据)。

当您想要更新 DOM 中的数据时,始终建议使用 .text(),而这只是供用户查看的数据/文本。

.html() 主要用于获取 div 中的 HTML 内容。


A
Adorjan Princz

当您打算将值显示为简单文本时,请使用 .text(...)。

当您打算将值显示为 html 格式的文本(或 HTML 内容)时,请使用 .html(...)。

当您不确定您的文本(例如来自输入控件)不包含在 HTML 中具有特殊含义的字符/标签时,您绝对应该使用 .text(...)。这非常重要,因为这可能导致文本无法正确显示,但也可能导致激活不需要的 JS 脚本片段(例如来自另一个用户输入)。


P
Paul Roub

.text() 将为您提供 HTML 标记之间的实际文本。例如,p 标记之间的段落文本。值得注意的是,它会为您提供您使用 $ 选择器定位的元素中的所有文本以及该选定元素的子元素中的所有文本。因此,如果您在 body 元素中有多个带有文本的 p 标记并执行 $(body).text(),您将获得所有段落中的 all 文本。 (仅文本,而不是 p 标记本身。)

.html() 将为您提供文本标签。所以 $(body).html() 基本上会给你整个页面的 HTML 页面

.val() 适用于具有 value 属性的元素,例如 inputinput 不包含文本或 HTML,因此 .text().html() 对于 input 元素都是 null


S
Seth

基本上,$("#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).

M
Michiel Kalkman

$('.div').html(val) 将设置所有选定元素的 HTML 值, $('.div').text(val) 将设置所有选定元素的文本值。

API docs for jQuery.text()

API docs for jQuery.html()

我猜它们分别对应于 Node#textContentElement#innerHTML。 (壁虎 DOM 参考)。


M
Mustkeem K

简单来说。

html()——获取内部 html(html 标签和文本)。

text()-- 仅获取文本(如果存在于内部)(仅文本)


html( ) & html(htmlString) 是两种不同的方法。前者返回匹配元素集中第一个元素的 innerHTML。后者设置每个匹配元素的内容。 api.jquery.com/html。显然,这个问题是关于后者的。 text( ) & 也是如此文本(文本)。
这些方法非常混乱,因为设置和获取方法具有相同的名称,唯一的区别是参数。他们真的应该有一些更有意义的名字,比如 getInnerHTML / setInnerHTMLForAll 什么的。
P
Pascal Tovohery

不同的是 .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/


B
BenMorel

我认为不同之处在于在 text() 中插入 html 标记,您的 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()
M
Minhaz

text 函数将值设置或检索为纯文本,否则,HTML 函数将值设置或检索为 HTML 标记以更改或修改它。如果您只想更改内容,请使用 text()。但是如果您需要更改标记,则必须使用 hmtl()。

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


R
Rajab Muhamed Rajab
**difference between text()&& html() && val()...?
#Html code..
<select id="d">
<option>Hello</option>
<option>Welcome</option>
</select>
# jquery code..
$(document).ready(function(){
   $("#d").html();
   $("#d").text();
   $("#d").val();

});

R
Rohit

尽可能使用 .text() 转义 HTML,尤其是在添加任何不受信任的数据(例如来自用户输入)时。 .html() 有一些 xss 漏洞


D
Deepak Rai
var v = "&#x5168;&#x540D;";
$("#div").html(v); //display as "全名"
$("#div").text(v); //display as "&#x5168;&#x540D;"

text() - 此方法设置或返回所选元素的文本内容。 html() - 此方法设置或返回所选元素的内容。在此处参考示例:https://www.tutorialspoint.com/online_jquery_editor.php