提取包含文本节点的HTML而不编码它们

时间:2017-11-24 12:17:59

标签: javascript jquery html encode

我有以下HTML:

var html = jQuery('#parent').html();
console.log(html)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="parent">
  <div id="child"></div>
  5 > 3
</div>

我做jQuery('#parent').html();我得到以下字符串:

'<div id="child"></div>
 5 &gt; 3'

我希望得到以下字符串:

'<div id="child"></div>
 5 > 3'

我如何实现这一目标?

请注意,我不会提前知道文本节点的值。我只是不希望文本节点的值(如果存在)被编码成某个html实体名称。

此问题不是How to decode HTML entities using jQuery?的重复,因为上述帖子回答此问题

目前的问题不是关于如何将&gt;等html实体名称解码为>。这很简单。

当前的问题是提取HTML,可能包含可能包含可编码值的文本节点,我不希望任何这些值被格式化/编码无论如何。

2 个答案:

答案 0 :(得分:3)

尝试这一点,强制jQuery解码一个不会附加到DOM的元素上的html。

var html = jQuery('<textarea/>').html(jQuery('#parent').html()).text();

console.log(html)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="parent">
  <div id="child"></div>
  5 > 3
</div>

答案 1 :(得分:2)

如果您正在寻找一种简单的JS方法,那么迭代childnode的{​​{1}}并连接它们的值

<强>演示

parent
var html = "";
[].slice.call(document.getElementById("parent").childNodes).forEach(function(item) {
  html += (item.nodeType == 3 ? item.nodeValue : item.outerHTML);
});
console.log(html);