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(); }); }
本博客文章已转移到独立博客,查看本文请点击做最好的三三查看全文。