您好,欢迎访问一九零五行业门户网

Firefox中使用outerHTML的2种解决方法_javascript技巧

对于dom对象的innerhtml属性想必大家都不会陌生,但是outerhtml用起来相对于会少一点了,innerhtml属性返回的是dom对象从开始标签到结束标签中所包含的html,而outerhtml属性返回的是包括dom对象本身标签在内的html,下图能很好的解释两个属性的区别:
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  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; 
};
比起上面的办法,不用去动原型,代码量也少了很多,相信还会有其他的解决办法。
其它类似信息

推荐信息