获取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;