Firefox中使用outerHTML的2種解決方法
對(duì)于DOM對(duì)象的innerHTML屬性想必大家都不會(huì)陌生,但是outerHTML用起來(lái)相對(duì)于會(huì)少一點(diǎn)了,innerHTML屬性返回的是DOM對(duì)象從開(kāi)始標(biāo)簽到結(jié)束標(biāo)簽中所包含的HTML,而outerHTML屬性返回的是包括DOM對(duì)象本身標(biāo)簽在內(nèi)的HTML,下圖能很好的解釋兩個(gè)屬性的區(qū)別:
outerHTML最開(kāi)始是屬于IE的私有屬性,可以查看MSDN上的說(shuō)明:outerHTML Property(http://msdn.microsoft.com/en-us/library/ms534310(VS.85).aspx)。目前IE、Chrome、Safari、Opera都能支持這個(gè)屬性,杯具的是outerHTML不支持Firefox,在Firefox中該屬性永遠(yuǎn)返回undefined,值得欣慰的是HTML5會(huì)加入這個(gè)屬性。
讓Firefox支持outerHTML屬性可以通過(guò)擴(kuò)展HTMLElement的原型來(lái)實(shí)現(xiàn):
if (typeof(HTMLElement) != "undefined") {
HTMLElement.prototype.__defineSetter__("outerHTML", function(s) {
var r = this.ownerDocument.createRange();
r.setStartBefore(this);
var df = r.createContextualFragment(s);
this.parentNode.replaceChild(df, this);
return s;
});
HTMLElement.prototype.__defineGetter__("outerHTML", function(){
var a = this.attributes, str = "<" this.tagName, i = 0;
for (; i < a.length; i )
if (a[i].specified)
str = " " Hormis dans les machines a sous preferees universelles, les casinos offrent des jeux par exemple Grandes six roues, Pai Go Poker, Blackjack, Baccarat, la <a >Roulette </a>et le Craps, entre autres. a[i].name "="" a[i].value """;
if (!this.canHaveChildren)
return str " />";
return str ">" this.innerHTML "<!--" this.tagName "-->";
});
HTMLElement.prototype.__defineGetter__("canHaveChildren", function(){
return
!/^(area|base|basefont|
col|frame|hr|img|br|
input|isindex|link|meta
|param)$/.test(this.tagName.toLowerCase());
});
}
該方法出自W3Help(http://www.w3help.org/zh-cn/causes/SD9017),有點(diǎn)繁瑣,而且還要侵入原型。還有一種更簡(jiǎn)單代替的辦法,先創(chuàng)建一個(gè)空節(jié)點(diǎn),將要獲取outerHTML屬性的DOM對(duì)象添加到這個(gè)空節(jié)點(diǎn)中,然后訪問(wèn)這個(gè)空節(jié)點(diǎn)的innerHTML就行了:
function outerHtml(elem){
if(typeof elem === "string") elem = document.getElementById(elem);
// 創(chuàng)建一個(gè)空div節(jié)點(diǎn)
var div = document.createElement("div");
// 將復(fù)制的elemCopy插入到空div節(jié)點(diǎn)中
div.appendChild(elem.cloneNode(true));
// 返回div的HTML內(nèi)容
return div.innerHTML;
};
比起上面的辦法,不用去動(dòng)原型,代碼量也少了很多,相信還會(huì)有其他的解決辦法。
相關(guān)文章
追蹤discord.js中刪除消息的用戶方法實(shí)例詳解
這篇文章主要為大家介紹了如何追蹤discord.js中刪除消息的用戶方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
整理一些JavaScript的IE和火狐的兼容性注意事項(xiàng)
整理一些JavaScript的IE和火狐的兼容性解決方法,有更好的方法多多交流2011-03-03
理運(yùn)用命名空間讓js不產(chǎn)生沖突避免全局變量的泛濫
為了避免變量之間的覆蓋與沖突,可以生成命名空間,命名空間是一種特殊的前綴,在不同的匿名函數(shù)中,根據(jù)功能聲明一個(gè)不同的命名空間2014-06-06
詳解JavaScript中扁平與樹(shù)形數(shù)據(jù)的轉(zhuǎn)換
這篇文章主要為大家想介紹了JavaScript中實(shí)現(xiàn)扁平與樹(shù)形數(shù)據(jù)相互轉(zhuǎn)換的方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JavaScript有一定的幫助,需要的可以參考一下2023-01-01
js與css實(shí)現(xiàn)彈出層覆蓋整個(gè)頁(yè)面的方法
這篇文章主要介紹了js與css實(shí)現(xiàn)彈出層覆蓋整個(gè)頁(yè)面的方法,分別以實(shí)例形式展示了彈出層覆蓋整個(gè)頁(yè)面的css樣式與js控制的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12

