获取DOM节点的string表示forms

Javascript:我有一个节点(元素或文档)的DOM表示,我正在寻找它的string表示forms。 例如,

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

应该会产生:

 get_string(el) == "<p>Test</p>"; 

我有强烈的感觉,我错过了一些简单的东西,但我只是没有find一种在IE,FF,Safari和Opera中工作的方法。 因此,outerHTML是没有select的。

您可以创build一个临时父节点,并获取它的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> 

你正在寻找的是'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>" 

你会发现我的jQuery插件在这里: 获取选定元素的外部HTML

在FF下,您可以使用XMLSerializer对象将XML序列化为一个string。 IE为您提供了一个节点的xml属性。 所以你可以做到以下几点:

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

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

 get_string=(el)=>el.outerHTML; 

如果你的元素有父母

 element.parentElement.innerHTML 

使用元素#outerHTML:

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

它也可以用来写DOM元素。 从Mozilla的文档:

元素DOM接口的outerHTML属性获取描述元素(包括其后代)的序列化HTML片段。 它可以被设置为用从给定stringparsing的节点replace元素。

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

使用element.outerHTML获取元素的完整表示,包括外部标记和属性。

我已经浪费了大量的时间,找出在接受答案中的代码迭代DOMElements时出了什么问题。 这对我是有效的,否则每一个元素都会从文档中消失:

 _getGpxString: function(node) { clone = node.cloneNode(true); var tmp = document.createElement("div"); tmp.appendChild(clone); return tmp.innerHTML; }, 

如果使用反应:

 const html = ReactDOM.findDOMNode(document.getElementsByTagName('html')[0]).outerHTML;