defineGetter https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineGetter defineSetter https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineSetter /** FF下面实现outerHTML **/ if (typeof(HTMLElement) != "undefined" && !window.opera) { 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.__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__("canHaveChildren", function(){ return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase()); }); } HTMLElement.prototype.__defineGetter__("innerText", function(){ var rng = document.createRange(); rng.selectNode(this); return rng.toString(); }); HTMLElement.prototype.__defineSetter__("innerText", function(newTxt){ var rng = document.createRange(); rng.selectNodeContents(this); rng.deleteContents(); this.appendChild(document.createTextNode(newTxt)); return newTxt; });