Firefoxで innerText と outerHTMLをエミュレート
2008-08-15追記: http://d.hatena.ne.jp/uupaa/20080815/1218787414 でouterHTML getter に対応しています。
Firefox用に、innerTextとouterHTMLをエミュレートするコードを書いてあったのですが(2002年頃かな?)、近頃はsetter,getter構文が廃止されているようで、代わりに__defineSetter__と__defineGetter__を使うようです。
var uud = document, uuw = window; var uu = uuw.uu = { ua: { ff: !!(navigator.userAgent.indexOf('Firefox') >= 0) // Firefox } }; if (uu.ua.ff && !HTMLElement.prototype.outerHTML) { HTMLElement.prototype.__defineSetter__("outerHTML", function(html) { this._outerHTMLValue = html; var r = uud.createRange(), f; r.setStartBefore(this); f = r.createContextualFragment(html); this.parentNode.replaceChild(f, this); }); } if (uu.ua.ff && !HTMLElement.prototype.innerText) { HTMLElement.prototype.__defineSetter__("innerText", function(text) { while(this.hasChildNodes()) { this.removeChild(this.lastChild); } this._innerTextValue = text; this.appendChild(uud.createTextNode(text)); }); HTMLElement.prototype.__defineGetter__("innerText", function() { return (typeof this._innerTextValue !== "undefined") ? this._innerTextValue : this.textContent; }); }
innerHTMLはFirefox2.0以降(1.5も?)でサポートされるようになってホッとした記憶がありますが、いまやモダンなブラウザのほぼ全てで、innerHTMLがサポートされているようなので、昔に比べてずいぶん楽ができますね。