本博客文章已转移到独立博客,查看本文请点击做最好的三三查看全文。
Firefox 不支持 DOM 对象的 outerHTML innerText outerText 属性……这是个一直困扰大家(包括我)很久的问题,网上也有不少的解决方法,这里摘录如下,收藏备用。(源链接:http://www.w3help.org/zh-cn/causes/SD9017)
解决方案
在 Firefox 中,可通过扩展 HTMLElement 的原型 (prototype) 来实现相关属性。
-
扩展 Firefox 中 DOM 元素的 outerHTML 属性:
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 += " " + 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()); }); }
-
扩展 Firefox 中 DOM 元素的 innerText 属性:
if (!!document.getBoxObjectFor || window.mozInnerScreenX != null) { HTMLElement.prototype.__defineSetter__("innerText", function(sText) { var parsedText = document.createTextNode(sText); this.innerHTML = ""; this.appendChild(parsedText); return parsedText; }); HTMLElement.prototype.__defineGetter__("innerText", function() { var r = this.ownerDocument.createRange(); r.selectNodeContents(this); return r.toString(); }); }
-
扩展 Firefox 中 DOM 元素的 outerText 属性:
if (!!document.getBoxObjectFor || window.mozInnerScreenX != null) { HTMLElement.prototype.__defineSetter__("outerText", function(sText) { var parsedText = document.createTextNode(sText); this.parentNode.replaceChild(parsedText, this); return parsedText; }); HTMLElement.prototype.__defineGetter__("outerText", function() { var r = this.ownerDocument.createRange(); r.selectNodeContents(this); return r.toString(); }); }
本博客文章已转移到独立博客,发表评论请点击做最好的三三查看全文。
Jul 23, 2012 07:45:31 AM
outerHTML 不是已经有了吗?innerText 和 textContent 不是一样的么?不知道 outerText 是干什么的。
Jul 23, 2012 11:04:19 AM
Firefox并不支持outerHTML,而且它不是w3c标准。innerTEXT和textContent是一样的……至于outerTEXT,其实就是把outerHTML当text处理,参考http://www.w3help.org/zh-cn/causes/SD9017。
Jul 23, 2012 11:44:23 AM
我的最新稳定版火狐支持 outerHTML 啊。
那个网站你最好是别看了,涉及到特性支持竟然不标注版本号。
Jul 23, 2012 11:50:44 AM
我直接Google检索过来的……哪里管得了那么多。
刚刚拿自己firefox试了一下,确实是支持。一开始写脚本的时候模糊印象就是firefox不支持outerHTML,就去Google了一下发现这个,于是就加了。
……嗯,就当是为不支持outerHTML的火狐做的兼容吧……反正我也只是个伪开发……