使用HTML实体了解jquery text()的细节

时间:2017-11-30 22:37:23

标签: javascript jquery html html-entities

我无法理解与HTML实体结合使用的jquery text()函数的具体内容。似乎text()函数将特殊HTML实体转换回普通字符。特别是,我不确定此代码段的行为:



$(document).ready(function() {
  var value = $("#test").text();
  console.log(value);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test">
  &lt;h1&gt; test &lt;/h1&gt;
</div>
&#13;
&#13;
&#13;

因为输出似乎是HTML实体未转义的字符串。这是否意味着text()函数unescapes HTML Entites?

编辑/跟进: 由于text()似乎只返回真正的文本内容,因此我无法理解此代码段,该代码段返回未转义的内容。如果text()返回转义字符串,为什么html函数会返回格式化的字符串?

&#13;
&#13;
$(document).ready(function() {
  var value = $("#test").text();
  console.log(value);
  $("#test").html(value);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test">
  &lt;h1&gt; test &lt;/h1&gt;
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

text()没有做任何特别的事情。浏览器本身在解析原始HTML时将实体转换为其呈现的字符。因此,当您在HTML中编写&lt;h1&gt;时,浏览器会将其转换为文字字符串<h1>.text()只会返回此文字。

当您使用.html()时,这会导致字符串被解析为HTML,因此<h1>将呈现为HTML标记,您将获得格式化结果。

答案 1 :(得分:-1)

如果查看源代码,您会看到它正在从元素中提取textContent。 https://j11y.io/jquery/#v=git&fn=jQuery.fn.text

textContent的一些文档: https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent

$(document).ready(function() {
  var value = $("#test").text();
  console.log(value);
  //https://j11y.io/jquery/#v=git&fn=jQuery.fn.text
  console.log($("#test").get(0).textContent);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test">
  &lt;h1&gt; test &lt;/h1&gt;
</div>