我找到了这个函数(不过,我忘记了在哪里):
function outerHTML(node){
// if IE, Chrome take the internal method otherwise build one
return node.outerHTML || (
function(n){
var div = document.createElement('div'), h;
div.appendChild( n.cloneNode(true) );
h = div.innerHTML;
div = null;
return h;
})(node);
}
但是这个函数通过调用outerHTML(my_element)
而不是my_element.outerHTML
我希望能够扩展一个 javascript DOM 元素对象,使其具有 outerHTML 元素,但如果存在,仍然使用本机元素。我怎么做?
我想这样做的主要原因是因为 Firefox 本身没有 outerHTML 方法,但如果可用,我仍然想使用本机实现,因为它们已经过全面测试,我觉得我可以信任它们。
更新:@Raynos 建议我不要为 outerHTML 做上述事情,我应该做一些类似于 outerHTML 规范的事情。我发现了这个:
如何在 Firefox 中执行 OuterHTML?
并且它不执行 .cloneNode,这可能会导致 FireFox 8.0.1 中的错误。
所以,我的解决方案是这样的,根据@Raynos:
if (!("outerHTML" in HTMLElement.prototype)) {
Object.defineProperty(HTMLElement.prototype, "outerHTML", {
get: getOuterHTML
});
}
function getOuterHTML(){
var parent = this.parentNode;
var el = document.createElement(parent.tagName);
el.appendChild(this.cloneNode(true));
var shtml = el.innerHTML;
return shtml;
}