この関数を見つけました(ただし、場所は忘れました):
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 を行うにはどうすればよいですか?
また、FireFox 8.0.1 でエラーを引き起こす可能性がある .cloneNode を実行しません。
@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;
}