如何在 javascript 中获取 DOM 元素的 HTML

IT技术 javascript html dom
2021-02-01 16:28:50

想象一下,我有以下 HTML:

<div><span><b>This is in bold</b></span></div>

我想获取 div 的 HTML,包括 div 本身。Element.innerHTML 只返回:

<span>...</span>

有任何想法吗?谢谢

6个回答

使用outerHTML

var el = document.getElementById( 'foo' );
alert( el.outerHTML );
2021-03-14 16:28:50
根据quirksmode.org/dom/w3c_html.html它应该适用于 IE、Opera、Safari 和 Chrome。
2021-03-16 16:28:50
不,它是一个 IE 扩展。尽管存在 Firefox 解决方法:snipplr.com/view/5460/outerhtml-in-firefox
2021-04-03 16:28:50
注意outerHTML是HTML5的一部分,大家应该及时支持。
2021-04-08 16:28:50
基于 WebKit 的浏览器似乎支持它,但 Firefox 不支持。
2021-04-11 16:28:50

扩展 jldupont 的答案,您可以即时创建一个包装元素:

var target = document.getElementById('myElement');
var wrap = document.createElement('div');
wrap.appendChild(target.cloneNode(true));
alert(wrap.innerHTML);

我正在克隆该元素以避免在实际文档中删除并重新插入该元素。但是,如果您要打印的元素下面有一棵非常大的树,这可能会很昂贵。

除非myElement是一个不能是 div 的子元素的元素,如 li、表格行或表格单元格等。
2021-04-08 16:28:50
现在是 2013 年,调用“domnode.outerHTML”适用于所有主要浏览器(自 v11 起为 FF)
2021-04-08 16:28:50
嗨 - 总的来说,这可能是我最好的选择。有点担心分离/附加元素,我不能搞砸 DOM,我不希望有大树。
2021-04-11 16:28:50

首先,放置包含div问题的元素,在元素上放置一个id属性,然后getElementById在其上使用:一旦获得元素,只需执行“e.innerHTML”即可检索 HTML。

<div><span><b>This is in bold</b></span></div>

=> <div id="wrap"><div><span><b>This is in bold</b></span></div></div>

接着:

var e=document.getElementById("wrap");
var content=e.innerHTML;

请注意,这outerHTML不是跨浏览器兼容的。

@JP:当然你也可以创建你想要的元素,但是这是没有理由的反对票......你也赚不到多少朋友在这里用这种态度。
2021-03-20 16:28:50
为 div 的父级获取 innerHTML 的问题是,我还将为 div 的兄弟级获取 innerHTML
2021-03-30 16:28:50
我的不好,我认为“在元素上放置一个 id 属性”指的是“元素”。通过上次编辑,您更清楚地想div在汤中添加额外的东西:)
2021-03-30 16:28:50
@JP:如果元素不在document......那它在哪里,你愿意启发我们吗?
2021-04-04 16:28:50
可以肯定的是,outerHTML 长期以来一直是跨浏览器兼容的——不要害怕使用它。
2021-04-13 16:28:50

老问题,但对于新人来说:

document.querySelector('div').outerHTML

你会想要这样的东西,因为它是跨浏览器的。

function OuterHTML(element) {
    var container = document.createElement("div");
    container.appendChild(element.cloneNode(true));

    return container.innerHTML;
}
这会element在调用时从文档中删除,对吗?
2021-04-03 16:28:50
现在通过添加 cloneNode 来解决这个问题,这使它与这里的其他一些答案几乎相同。
2021-04-12 16:28:50