Я нашел эту функцию (хотя я забыл, где):
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
Я хочу иметь возможность расширять объект элемента DOM javascript таким образом, чтобы он содержал элемент externalHTML, но все еще использовал собственный, если он существует. как мне это сделать?
Основная причина, почему я хочу сделать это таким образом, заключается в том, что Firefox изначально не имеет метода externalHTML, но я все еще хочу использовать нативные реализации, если они доступны, так как они были тщательно протестированы, и я чувствую, что могу доверяй им.
UPDATE:
@Raynos предложил, чтобы я не делал выше для externalHTML, и что я должен сделать что-то вроде спецификаций externalHTML.
Я нашел это:
Как мне сделать OuterHTML в Firefox?
и это не делает .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;
}