<!--
if(
window
.
Event
){
//?修正Event的DOM
????/*
????????????????????????????????IE5????????MacIE5????????Mozilla????????Konqueror2.2????????Opera5
????event????????????????????????yes????????yes????????????yes????????????yes????????????????????yes
????event.returnValue????????????yes????????yes????????????no????????????no????????????????????no
????event.cancelBubble????????????yes????????yes????????????no????????????no????????????????????no
????event.srcElement????????????yes????????yes????????????no????????????no????????????????????no
????event.fromElement????????????yes????????yes????????????no????????????no????????????????????no
????
????*/
????
Event
.
prototype
.
__defineSetter__
(
"returnValue"
,function(
b
){
//?
????????
if(!
b
)
this
.
preventDefault
();
????????return?
b
;
????????});
????
Event
.
prototype
.
__defineSetter__
(
"cancelBubble"
,function(
b
){
//?設(shè)置或者檢索當(dāng)前事件句柄的層次冒泡
????????
if(
b
)
this
.
stopPropagation
();
????????return?
b
;
????????});
????
Event
.
prototype
.
__defineGetter__
(
"srcElement"
,function(){
????????var?
node
=
this
.
target
;
????????while(
node
.
nodeType
!=
1
)
node
=
node
.
parentNode
;
????????return?
node
;
????????});
????
Event
.
prototype
.
__defineGetter__
(
"fromElement"
,function(){
//?返回鼠標(biāo)移出的源節(jié)點(diǎn)
????????
var?
node
;
????????if(
this
.
type
==
"mouseover"
)
????????????
node
=
this
.
relatedTarget
;
????????else?if(
this
.
type
==
"mouseout"
)
????????????
node
=
this
.
target
;
????????if(!
node
)return;
????????while(
node
.
nodeType
!=
1
)
node
=
node
.
parentNode
;
????????return?
node
;
????????});
????
Event
.
prototype
.
__defineGetter__
(
"toElement"
,function(){
//?返回鼠標(biāo)移入的源節(jié)點(diǎn)
????????
var?
node
;
????????if(
this
.
type
==
"mouseout"
)
????????????
node
=
this
.
relatedTarget
;
????????else?if(
this
.
type
==
"mouseover"
)
????????????
node
=
this
.
target
;
????????if(!
node
)return;
????????while(
node
.
nodeType
!=
1
)
node
=
node
.
parentNode
;
????????return?
node
;
????????});
????
Event
.
prototype
.
__defineGetter__
(
"offsetX"
,function(){
????????return?
this
.
layerX
;
????????});
????
Event
.
prototype
.
__defineGetter__
(
"offsetY"
,function(){
????????return?
this
.
layerY
;
????????});
????}
if(
window
.
Document
){
//?修正Document的DOM
????/*
????????????????????????????????IE5????????MacIE5????????Mozilla????????Konqueror2.2????????Opera5
????document.documentElement????yes????????yes????????????yes????????????yes????????????????????no
????document.activeElement????????yes????????null????????no????????????no????????????????????no
????
????*/
????
}
if(
window
.
Node
){
//?修正Node的DOM
????/*
????????????????????????????????IE5????????MacIE5????????Mozilla????????Konqueror2.2????????Opera5
????Node.contains????????????????yes????????yes????????????no????????????no????????????????????yes
????Node.replaceNode????????????yes????????no????????????no????????????no????????????????????no
????Node.removeNode????????????????yes????????no????????????no????????????no????????????????????no
????Node.children????????????????yes????????yes????????????no????????????no????????????????????no
????Node.hasChildNodes????????????yes????????yes????????????yes????????????yes????????????????????no
????Node.childNodes????????????????yes????????yes????????????yes????????????yes????????????????????no
????Node.swapNode????????????????yes????????no????????????no????????????no????????????????????no
????Node.currentStyle????????????yes????????yes????????????no????????????no????????????????????no
????
????*/
????
Node
.
prototype
.
replaceNode
=function(
Node
){
//?替換指定節(jié)點(diǎn)
????????
this
.
parentNode
.
replaceChild
(
Node
,
this
);
????????}
????
Node
.
prototype
.
removeNode
=function(
removeChildren
){
//?刪除指定節(jié)點(diǎn)
????????
if(
removeChildren
)
????????????return?
this
.
parentNode
.
removeChild
(
this
);
????????else{
????????????var?
range
=
document
.
createRange
();
????????????
range
.
selectNodeContents
(
this
);
????????????return?
this
.
parentNode
.
replaceChild
(
range
.
extractContents
(),
this
);
????????????}
????????}
????
Node
.
prototype
.
swapNode
=function(
Node
){
//?交換節(jié)點(diǎn)
????????
var?
nextSibling
=
this
.
nextSibling
;
????????var?
parentNode
=
this
.
parentNode
;
????????
node
.
parentNode
.
replaceChild
(
this
,
Node
);
????????
parentNode
.
insertBefore
(
node
,
nextSibling
);
????????}
????}
if(
window
.
HTMLElement
){
????
HTMLElement
.
prototype
.
__defineGetter__
(
"all"
,function(){
????????var?
a
=
this
.
getElementsByTagName
(
"*"
);
????????var?
node
=
this
;
????????
a
.
tags
=function(
sTagName
){
????????????return?
node
.
getElementsByTagName
(
sTagName
);
????????????}
????????return?
a
;
????????});
????
HTMLElement
.
prototype
.
__defineGetter__
(
"parentElement"
,function(){
????????if(
this
.
parentNode
==
this
.
ownerDocument
)return?
null
;
????????return?
this
.
parentNode
;
????????});
????
HTMLElement
.
prototype
.
__defineGetter__
(
"children"
,function(){
????????var?
tmp
=[];
????????var?
j
=
0
;
????????var?
n
;
????????for(var?
i
=
0
;
i
<
this
.
childNodes
.
length
;
i
++){
????????????
n
=
this
.
childNodes
[
i
];
????????????if(
n
.
nodeType
==
1
){
????????????????
tmp
[
j
++]=
n
;
????????????????if(
n
.
name
){
????????????????????if(!
tmp
[
n
.
name
])
????????????????????????
tmp
[
n
.
name
]=[];
????????????????????
tmp
[
n
.
name
][
tmp
[
n
.
name
].
length
]=
n
;
????????????????????}
????????????????if(
n
.
id
)
????????????????????
tmp
[
n
.
id
]=
n
;
????????????????}
????????????}
????????return?
tmp
;
????????});
????
HTMLElement
.
prototype
.
__defineGetter__
(
"currentStyle"
,?function(){
????????return?
this
.
ownerDocument
.
defaultView
.
getComputedStyle
(
this
,
null
);
????????});
????
HTMLElement
.
prototype
.
__defineSetter__
(
"outerHTML"
,function(
sHTML
){
????????var?
r
=
this
.
ownerDocument
.
createRange
();
????????
r
.
setStartBefore
(
this
);
????????var?
df
=
r
.
createContextualFragment
(
sHTML
);
????????
this
.
parentNode
.
replaceChild
(
df
,
this
);
????????return?
sHTML
;
????????});
????
HTMLElement
.
prototype
.
__defineGetter__
(
"outerHTML"
,function(){
????????var?
attr
;
????????var?
attrs
=
this
.
attributes
;
????????var?
str
=
"<"
+
this
.
tagName
;
????????for(var?
i
=
0
;
i
<
attrs
.
length
;
i
++){
????????????
attr
=
attrs
[
i
];
????????????if(
attr
.
specified
)
????????????????
str
+=
"?"
+
attr
.
name
+
'="'
+
attr
.
value
+
'"'
;
????????????}
????????if(!
this
.
canHaveChildren
)
????????????return?
str
+
">"
;
????????return?
str
+
">"
+
this
.
innerHTML
+
"</"
+
this
.
tagName
+
">"
;
????????});
????
HTMLElement
.
prototype
.
__defineGetter__
(
"canHaveChildren"
,function(){
????????switch(
this
.
tagName
.
toLowerCase
()){
????????????case?
"area"
:
????????????case?
"base"
:
????????????case?
"basefont"
:
????????????case?
"col"
:
????????????case?
"frame"
:
????????????case?
"hr"
:
????????????case?
"img"
:
????????????case?
"br"
:
????????????case?
"input"
:
????????????case?
"isindex"
:
????????????case?
"link"
:
????????????case?
"meta"
:
????????????case?
"param"
:
????????????????return?
false
;
????????????}
????????return?
true
;
????????});
????
HTMLElement
.
prototype
.
__defineSetter__
(
"innerText"
,function(
sText
){
????????var?
parsedText
=
document
.
createTextNode
(
sText
);
????????
this
.
innerHTML
=
parsedText
;
????????return?
parsedText
;
????????});
????
HTMLElement
.
prototype
.
__defineGetter__
(
"innerText"
,function(){
????????var?
r
=
this
.
ownerDocument
.
createRange
();
????????
r
.
selectNodeContents
(
this
);
????????return?
r
.
toString
();
????????});
????
HTMLElement
.
prototype
.
__defineSetter__
(
"outerText"
,function(
sText
){
????????var?
parsedText
=
document
.
createTextNode
(
sText
);
????????
this
.
outerHTML
=
parsedText
;
????????return?
parsedText
;
????????});
????
HTMLElement
.
prototype
.
__defineGetter__
(
"outerText"
,function(){
????????var?
r
=
this
.
ownerDocument
.
createRange
();
????????
r
.
selectNodeContents
(
this
);
????????return?
r
.
toString
();
????????});
????
HTMLElement
.
prototype
.
attachEvent
=function(
sType
,
fHandler
){
????????var?
shortTypeName
=
sType
.
replace
(/
on
/,
""
);
????????
fHandler
.
_ieEmuEventHandler
=function(
e
){
????????????
window
.
event
=
e
;
????????????return?
fHandler
();
????????????}
????????
this
.
addEventListener
(
shortTypeName
,
fHandler
.
_ieEmuEventHandler
,
false
);
????????}
????
HTMLElement
.
prototype
.
detachEvent
=function(
sType
,
fHandler
){
????????var?
shortTypeName
=
sType
.
replace
(/
on
/,
""
);
????????if(
typeof
(
fHandler
.
_ieEmuEventHandler
)==
"function"
)
????????????
this
.
removeEventListener
(
shortTypeName
,
fHandler
.
_ieEmuEventHandler
,
false
);
????????else
????????????
this
.
removeEventListener
(
shortTypeName
,
fHandler
,
true
);
????????}
????
HTMLElement
.
prototype
.
contains
=function(
Node
){
//?是否包含某節(jié)點(diǎn)
????????
do?if(
Node
==
this
)return?
true
;
????????while(
Node
=
Node
.
parentNode
);
????????return?
false
;
????????}
????
HTMLElement
.
prototype
.
insertAdjacentElement
=function(
where
,
parsedNode
){
????????switch(
where
){
????????????case?
"beforeBegin"
:
????????????????
this
.
parentNode
.
insertBefore
(
parsedNode
,
this
);
????????????????break;
????????????case?
"afterBegin"
:
????????????????
this
.
insertBefore
(
parsedNode
,
this
.
firstChild
);
????????????????break;
????????????case?
"beforeEnd"
:
????????????????
this
.
appendChild
(
parsedNode
);
????????????????break;
????????????case?
"afterEnd"
:
????????????????if(
this
.
nextSibling
)
????????????????????
this
.
parentNode
.
insertBefore
(
parsedNode
,
this
.
nextSibling
);
????????????????else
????????????????????
this
.
parentNode
.
appendChild
(
parsedNode
);
????????????????break;
????????????}
????????}
????
HTMLElement
.
prototype
.
insertAdjacentHTML
=function(
where
,
htmlStr
){
????????var?
r
=
this
.
ownerDocument
.
createRange
();
????????
r
.
setStartBefore
(
this
);
????????var?
parsedHTML
=
r
.
createContextualFragment
(
htmlStr
);
????????
this
.
insertAdjacentElement
(
where
,
parsedHTML
);
????????}
????
HTMLElement
.
prototype
.
insertAdjacentText
=function(
where
,
txtStr
){
????????var?
parsedText
=
document
.
createTextNode
(
txtStr
);
????????
this
.
insertAdjacentElement
(
where
,
parsedText
);
????????}
????
HTMLElement
.
prototype
.
attachEvent
=function(
sType
,
fHandler
){
????????var?
shortTypeName
=
sType
.
replace
(/
on
/,
""
);
????????
fHandler
.
_ieEmuEventHandler
=function(
e
){
????????????
window
.
event
=
e
;
????????????return?
fHandler
();
????????????}
????????
this
.
addEventListener
(
shortTypeName
,
fHandler
.
_ieEmuEventHandler
,
false
);
????????}
????
HTMLElement
.
prototype
.
detachEvent
=function(
sType
,
fHandler
){
????????var?
shortTypeName
=
sType
.
replace
(/
on
/,
""
);
????????if(
typeof
(
fHandler
.
_ieEmuEventHandler
)==
"function"
)
????????????
this
.
removeEventListener
(
shortTypeName
,
fHandler
.
_ieEmuEventHandler
,
false
);
????????else
????????????
this
.
removeEventListener
(
shortTypeName
,
fHandler
,
true
);
????????}
????}
//-->
</script>