提取 HTML 包含文本节点而不对它们进行编码

extract HTML containing text nodes without encoding them

我有以下 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? 的重复 因为 前面提到的 post 不是 回答这个问题.

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

当前的问题是关于提取 HTML 可能 包含文本节点 可能 包含可编码值而我不我不希望这些值中的任何一个以任何方式成为 formatted/encoded。

试试这个,通过强制 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>

如果您正在寻找一种普通的 JS 方法,请迭代 parentchildnode 并连接它们的值

演示

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