1: if(navigator.userAgent.indexOf("MSIE")<0)
2: {
3: if(window.Event)
4: {
5: Event.prototype.__defineSetter__("returnValue",function(b){
6: if(!b)this.preventDefault();
7: return b;
8: });
9: Event.prototype.__defineSetter__("cancelBubble",function(b){
10: if(b)this.stopPropagation();
11: return b;
12: });
13: Event.prototype.__defineGetter__("srcElement",function(){
14: var node=this.target;
15: while(node.nodeType!=1)node=node.parentNode;
16: return node;
17: });
18: Event.prototype.__defineGetter__("fromElement",function(){
19: var node;
20: if(this.type=="mouseover")
21: node=this.relatedTarget;
22: else if(this.type=="mouseout")
23: node=this.target;
24: if(!node)return;
25: while(node.nodeType!=1)node=node.parentNode;
26: return node;
27: });
28: Event.prototype.__defineGetter__("toElement",function(){
29: var node;
30: if(this.type=="mouseout")
31: node=this.relatedTarget;
32: else if(this.type=="mouseover")
33: node=this.target;
34: if(!node)return;
35: while(node.nodeType!=1)node=node.parentNode;
36: return node;
37: });
38: Event.prototype.__defineGetter__("offsetX",function(){
39: return this.layerX;
40: });
41: Event.prototype.__defineGetter__("offsetY",function(){
42: return this.layerY;
43: });
44: }
45: if(window.Node){
46: Node.prototype.replaceNode=function(Node){// 替换指定节点
47: this.parentNode.replaceChild(Node,this);
48: }
49: Node.prototype.removeNode=function(removeChildren){// 删除指定节点
50: if(removeChildren)
51: return this.parentNode.removeChild(this);
52: else{
53: var range=document.createRange();
54: range.selectNodeContents(this);
55: return this.parentNode.replaceChild(range.extractContents(),this);
56: }
57: }
58: Node.prototype.swapNode=function(Node){// 交换节点
59: var nextSibling=this.nextSibling;
60: var parentNode=this.parentNode;
61: node.parentNode.replaceChild(this,Node);
62: parentNode.insertBefore(node,nextSibling);
63: }
64: }
65: if(window.HTMLElement){
66: HTMLElement.prototype.__defineGetter__("all",function(){
67: var a=this.getElementsByTagName("*");
68: var node=this;
69: a.tags=function(sTagName){
70: return node.getElementsByTagName(sTagName);
71: }
72: return a;
73: });
74: HTMLElement.prototype.__defineGetter__("parentElement",function(){
75: if(this.parentNode==this.ownerDocument)return null;
76: return this.parentNode;
77: });
78: HTMLElement.prototype.__defineGetter__("children",function(){
79: var tmp=[];
80: var j=0;
81: var n;
82: for(var i=0;i<this.childNodes.length;i++){
83: n=this.childNodes[i];
84: if(n.nodeType==1){
85: tmp[j++]=n;
86: if(n.name){
87: if(!tmp[n.name])
88: tmp[n.name]=[];
89: tmp[n.name][tmp[n.name].length]=n;
90: }
91: if(n.id)
92: tmp[n.id]=n;
93: }
94: }
95: return tmp;
96: });
97: HTMLElement.prototype.__defineGetter__("currentStyle", function(){
98: return this.ownerDocument.defaultView.getComputedStyle(this,null);
99: });
100: HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){
101: var r=this.ownerDocument.createRange();
102: r.setStartBefore(this);
103: var df=r.createContextualFragment(sHTML);
104: this.parentNode.replaceChild(df,this);
105: return sHTML;
106: });
107: HTMLElement.prototype.__defineGetter__("outerHTML",function(){
108: var attr;
109: var attrs=this.attributes;
110: var str="<"+this.tagName;
111: for(var i=0;i<attrs.length;i++){
112: attr=attrs[i];
113: if(attr.specified)
114: str+=" "+attr.name+'="'+attr.value+'"';
115: }
116: if(!this.canHaveChildren)
117: return str+">";
118: return str+">"+this.innerHTML+"</"+this.tagName+">";
119: });
120: HTMLElement.prototype.__defineGetter__("canHaveChildren",function(){
121: switch(this.tagName.toLowerCase()){
122: case "area":
123: case "base":
124: case "basefont":
125: case "col":
126: case "frame":
127: case "hr":
128: case "img":
129: case "br":
130: case "input":
131: case "isindex":
132: case "link":
133: case "meta":
134: case "param":
135: return false;
136: }
137: return true;
138: });
139:
140: HTMLElement.prototype.__defineSetter__("innerText",function(sText){
141: if(this.tagName!=null && this.tagName=="TEXTAREA")
142: {
143: this.value=sText;
144: }
145: else
146: {
147: var parsedText=document.createTextNode(sText);
148: this.innerHTML=parsedText;
149: return parsedText;
150: }
151: });
152: HTMLElement.prototype.__defineGetter__("innerText",function(){
153: var r=this.ownerDocument.createRange();
154: r.selectNodeContents(this);
155: return r.toString();
156: });
157: HTMLElement.prototype.__defineSetter__("outerText",function(sText){
158: var parsedText=document.createTextNode(sText);
159: this.outerHTML=parsedText;
160: return parsedText;
161: });
162: HTMLElement.prototype.__defineGetter__("outerText",function(){
163: var r=this.ownerDocument.createRange();
164: r.selectNodeContents(this);
165: return r.toString();
166: });
167: HTMLElement.prototype.attachEvent=function(sType,fHandler){
168: var shortTypeName=sType.replace(/on/,"");
169: this.addEventListener(shortTypeName,fHandler,false);
170: }
171: Document.prototype.attachEvent=function(sType,fHandler){
172: var shortTypeName=sType.replace(/on/,"");
173: this.addEventListener(shortTypeName,fHandler,false);
174: };
175: Window.prototype.attachEvent=function(sType,fHandler){
176: var shortTypeName=sType.replace(/on/,"");
177: this.addEventListener(shortTypeName,fHandler,false);
178: };
179: HTMLElement.prototype.detachEvent=function(sType,fHandler){
180: var shortTypeName=sType.replace(/on/,"");
181: this.removeEventListener(shortTypeName,fHandler,true);
182: }
183: HTMLElement.prototype.contains=function(node){// 是否包含某节点
184: if(node==null)return false;
185: do if(node==this)return true;
186: while(node=node.parentNode);
187: return false;
188: }
189: HTMLElement.prototype.insertAdjacentElement=function(where,parsedNode){
190: switch(where){
191: case "beforeBegin":
192: this.parentNode.insertBefore(parsedNode,this);
193: break;
194: case "afterBegin":
195: this.insertBefore(parsedNode,this.firstChild);
196: break;
197: case "beforeEnd":
198: this.appendChild(parsedNode);
199: break;
200: case "afterEnd":
201: if(this.nextSibling)
202: this.parentNode.insertBefore(parsedNode,this.nextSibling);
203: else
204: this.parentNode.appendChild(parsedNode);
205: break;
206: }