对于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;
};
比起上面的办法,不用去动原型,代码量也少了很多,相信还会有其他的解决办法。