获取DOM节点的字符串表示形式

Bol*_*wyn 89 javascript string dom element cross-browser

Javascript:我有一个节点(元素或文档)的DOM表示,我正在寻找它的字符串表示.例如,

var el = document.createElement("p");
el.appendChild(document.createTextNode("Test"));
Run Code Online (Sandbox Code Playgroud)

应该产量:

get_string(el) == "<p>Test</p>";
Run Code Online (Sandbox Code Playgroud)

我有强烈的感觉,我错过了一些简单的东西,但我找不到一个适用于IE,FF,Safari和Opera的方法.因此,outerHTML是没有选择的.

CMS*_*CMS 120

您可以创建一个临时父节点,并获取它的innerHTML内容:

var el = document.createElement("p");
el.appendChild(document.createTextNode("Test"));

var tmp = document.createElement("div");
tmp.appendChild(el);
console.log(tmp.innerHTML); // <p>Test</p>
Run Code Online (Sandbox Code Playgroud)

编辑: 请参阅下面有关outerHTML的答案.el.outerHTML应该是所有需要的.

  • outerHTML就是答案 (27认同)
  • 在将它添加到`tmp`之前,不要忘记克隆你的`element`,当你将它添加到`tmp`时,它将从`document`中删除. (3认同)
  • 哎哟。如此简单...只需一点注意:如果我想要整个文档“字符串化”,我可以对 document.documentElement 使用相同的方法(用例:AJAX 请求)。也许您可以将其纳入答案中? (2认同)
  • @Boldewyn:您可以将整个`document.documentElement`附加到div中吗?哇靠.... (2认同)

gto*_*nie 42

您正在寻找的是'outerHTML',但我们需要一个后备因素,因为它与旧浏览器不兼容.

var getString = (function() {
  var DIV = document.createElement("div");

  if ('outerHTML' in DIV)
    return function(node) {
      return node.outerHTML;
    };

  return function(node) {
    var div = DIV.cloneNode();
    div.appendChild(node.cloneNode(true));
    return div.innerHTML;
  };

})();

// getString(el) == "<p>Test</p>"
Run Code Online (Sandbox Code Playgroud)

你会在这里找到我的jQuery插件:获取所选元素的外部HTML

  • 在2015年,我会说这是最好的答案. (3认同)

Shi*_*ora 17

我不认为你需要任何复杂的脚本.只是用

get_string=(el)=>el.outerHTML;
Run Code Online (Sandbox Code Playgroud)


Bry*_*yle 15

在FF下,您可以使用该XMLSerializer对象将XML序列化为字符串.IE为您xml提供节点的属性.所以你可以做到以下几点:

function xml2string(node) {
   if (typeof(XMLSerializer) !== 'undefined') {
      var serializer = new XMLSerializer();
      return serializer.serializeToString(node);
   } else if (node.xml) {
      return node.xml;
   }
}
Run Code Online (Sandbox Code Playgroud)


Ric*_*aca 6

使用Element#outerHTML:

var el = document.createElement("p");
el.appendChild(document.createTextNode("Test"));

console.log(el.outerHTML);
Run Code Online (Sandbox Code Playgroud)

它也可以用于编写DOM元素.来自Mozilla的文档:

元素DOM接口的outerHTML属性获取描述元素(包括其后代)的序列化HTML片段.可以将其设置为使用从给定字符串解析的节点替换元素.

https://developer.mozilla.org/en-US/docs/Web/API/Element/outerHTML


小智 6

尝试

new XMLSerializer().serializeToString(element);
Run Code Online (Sandbox Code Playgroud)