我發現這個功能(雖然,我忘了在哪裏):如何擴展JavaScript對象,使得本身不具備outerHTML瀏覽器,我可以將其定義?
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規範的工作。 我發現這一點: How do I do OuterHTML in 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;
}
Raynos做得更好。檢查方法是否先存在。 ;) – nickytonline
@nickyt還定義了實際的getter和setter,你增加一個功能,這意味着你必須做'elm.outerHTML();',而不是'elm.outerHTML' – Raynos
正要約在您的實現作出評論。 – nickytonline