不使用innerHTML获取innerHTML

发布于 2024-12-06 10:52:23 字数 287 浏览 2 评论 0原文

我知道 innerHTML 应该很讨厌(我们不要开始争论。我们正试图在我的工作中逐步淘汰它),但我需要能够获取某些 HTML 的纯文本版本。现在我有这些行...

bodycontents = document.getElementById("renderzone").innerHTML;

但我想知道如何在没有 innerHTML 的情况下获得相同的结果。我并不害怕 DOM 操作(我已经做过很多了),所以请随意在你的答案中尽可能地技术化。

I know innerHTML is supposed to be icky (and let's not start a debate. We're trying to phase it out at my work), but I need to be able to get the plaintext version of some HTML. Right now I have the lines...

bodycontents = document.getElementById("renderzone").innerHTML;

But I am wondering exactly how I would, say, get the same result WITHOUT innerHTML. I am not afraid of DOM manipulation (I've done a ton of it), so please feel free to be as technical in your answer as you need to be.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

笙痞 2024-12-13 10:52:23

在不使用 element.innerHTML 属性的情况下检索元素内部 HTML 内容听起来像是一项学术追求,不太可能有简单的解决方案。

基于 DOM 的方法需要递归地检索所有子节点并附加其文本内容并序列化元素名称和属性。例如(在 JavaScript/DOM 伪代码中):

var getHtmlContent(el, str) {
  str += '<' + el.nodeName;
  foreach (attr in el.attribute) {
    str += attr.name + '="' + escapeAttrVal(attr.value) + '"';
  }
  str += '>';
  foreach (node in el.childNodes) {
    if (node.isTextNode()) {
      str += node.textContent;
    } else {
      str += getHtmlContent(node, str);
    }
  }
  str += '</' + el.nodeName + '>';
  return str;
}
getHtmlContent(myElement, ''); // '<div id="myElement" class="foo">Text<div...'

Retrieving an elements inner HTML content without using the element.innerHTML attribute sounds like an academic pursuit that isn't likely to have a simple solution.

A DOM based approach would require something like recursively walking to retrieve all child nodes and append their text content and serialize the element name and attributes. For example (in JavaScript/DOM pseudo-code):

var getHtmlContent(el, str) {
  str += '<' + el.nodeName;
  foreach (attr in el.attribute) {
    str += attr.name + '="' + escapeAttrVal(attr.value) + '"';
  }
  str += '>';
  foreach (node in el.childNodes) {
    if (node.isTextNode()) {
      str += node.textContent;
    } else {
      str += getHtmlContent(node, str);
    }
  }
  str += '</' + el.nodeName + '>';
  return str;
}
getHtmlContent(myElement, ''); // '<div id="myElement" class="foo">Text<div...'
层林尽染 2024-12-13 10:52:23

在现代浏览器上,XMLSerializer 可以帮助您:

var el = document.getElementById('my-id');
var html_string = new XMLSerializer().serializeToString(el);
console.log(html_string);
<p id="my-id">Greetings Friends</p>

On modern browser the XMLSerializer may help you:

var el = document.getElementById('my-id');
var html_string = new XMLSerializer().serializeToString(el);
console.log(html_string);
<p id="my-id">Greetings Friends</p>

烛影斜 2024-12-13 10:52:23

我想你想要这个:

someElement.textContent

I think you want this:

someElement.textContent
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文