html 与火狐关联,Firefox中使用outerHTML的2种解决方法

对于DOM对象的innerHTML属性想必大家都不会陌生,但是outerHTML用起来相对于会少一点了,innerHTML属性返回的是DOM对象从开始标签到结束标签中所包含的HTML,而outerHTML属性返回的是包括DOM对象本身标签在内的HTML,下图能很好的解释两个属性的区别:

eeb244ae9905409d3f619564a2aaf446.png

outerHTML最开始是属于IE的私有属性,可以查看MSDN上的说明:outerHTML Property(http://msdn.microsoft.com/en-us/library/ms534310(VS.85).aspx)。目前IE、Chrome、Safari、Opera都能支持这个属性,杯具的是outerHTML不支持Firefox,在Firefox中该属性永远返回undefined,值得欣慰的是HTML5会加入这个属性。

让Firefox支持outerHTML属性可以通过扩展HTMLElement的原型来实现:

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 = "

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 Roulette et le Craps, entre autres. a[i].name "="" a[i].value """;

if (!this.canHaveChildren)

return str " />";

return str ">" this.innerHTML "";

});

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),有点繁琐,而且还要侵入原型。还有一种更简单代替的办法,先创建一个空节点,将要获取outerHTML属性的DOM对象添加到这个空节点中,然后访问这个空节点的innerHTML就行了:

function outerHtml(elem){

if(typeof elem === "string") elem = document.getElementById(elem);

// 创建一个空div节点

var div = document.createElement("div");

// 将复制的elemCopy插入到空div节点中

div.appendChild(elem.cloneNode(true));

// 返回div的HTML内容

return div.innerHTML;

};

比起上面的办法,不用去动原型,代码量也少了很多,相信还会有其他的解决办法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值