1. DOM의 인터페이스는 기본적으로 동일하지만 테스트 후 Mozilla의 DOM이 더 표준적인 것으로 나타났습니다. 방법이 동일하더라도 IE에서는 약간의 차이가 있지만 그렇지 않습니다. Matter
2. 이벤트 모델 측면에서 이 점의 차이는 상대적으로 큽니다.
Mozilla의 e.target은 ie의 event.srcElement와 동일하지만 후자가 html을 반환한다는 차이점이 있습니다.
요소는 노드를 반환합니다. 즉, 텍스트 노드를 포함하여 메서드는 다음과 같습니다.
var trg =
while(trg.nodeType!=1) trg=trg.parentNode;
e.which는 mozilla와 동일합니다. event.keyCode는
e.layerX, e.layerY, e.pageX, e.pageY...
http://fason.nease.net/mozilla/dom/이벤트 부분을 확인하실 수 있습니다
이벤트는 IE의 attachmentEvent, detatchEvent에 해당하는 addEventListener,removeEventListener를 사용하여 Mozilla에 바인딩됩니다
3. 참조, IE4와 호환되려면 document.all을 추가하면
form 요소의 참조가 더 표준이어야 함을 결정할 수 있습니다. var oInput = document.formName.elements["input1" ]
4. XML 적용의 차이는 IE에서 ActiveX를 통해 생성되고 Mozilla에는 이미 이러한 개체가 있기 때문에 적용의 차이가 더 큽니다(dom2 지원 필요)
Xmldomdocument: var doc = document.inplementation.createDocument( "","",null)
xmlhttp: var req = new XMLHttpRequest()
5 .innerText는 Mozilla에서 지원되지 않습니다.
insertAdjacentHTML은 일부 범위 기술을 사용해야 합니다. 상대적으로 사용하기 쉬운 방법입니다. Mozilla는 DOM 메소드 insertBefore를 사용하여 호환됩니다.
7. Array 및 Date의 일부 메소드와 같이 좀 더 미묘한 경우에는 ie와 mozilla 간에 약간의 차이가 있습니다. 자세하게 언급할 것. . .
두 가지 예를 작성하세요.
1. ID로 객체를 가져오는 경우
function getObjectById(id)
{
if (typeof(id) != "string" || id == "" ) null 반환
if (document.all) return document.all(id)
if (document.getElementById) return document.getElementById(id)
try {return eval(id) ;} catch(e){ return null;}
}
2. 이벤트에 처리 함수를 연결합니다.
if(document.attachEvent)
window.attachEvent("onresize", function(){reinsert ();});
else
window.addEventListener('resize', function(){reinsert();}, false)
IE에서는 onclick이고 Firefox NS에서는 그렇습니다.
스크립트로 제출
document.formName.action = "..."을 클릭하세요.
document.formName.submit()
XML 처리 방법을 사용할 수 없는 것 같습니다. mozilla에서
var FCKXml = function()
{}
FCKXml.prototype.GetHttpRequest = function()
{
if ( window.XMLHttpRequest )// Gecko
return new XMLHttpRequest()
else if ( window.ActiveXObject )// IE
return new ActiveXObject("MsXml2.typeof(asyncFunctionPointer) == 'function' ) ;
var oXmlHttp = this.GetHttpRequest() ;
oXmlHttp.open( "GET", urlToCall, bAsync ) ;
if ( bAsync )
{
oXmlHttp.onreadystatechange = function()
{
if ( oXmlHttp.readyState == 4 )
{
oFCKXml.DOMDocument = oXmlHttp.responseXML ;
asyncFunctionPointer( oFCKXml ) ; }
}
}
oXmlHttp.send( null )
if ( ! bAsync && oXmlHttp.status && oXmlHttp.status == 200 )
this.DOMDocument = oXmlHttp.responseXML ;
else
throw( '' urlToCall ''' 로드 중 오류 발생 )
}
FCKXml.prototype.SelectNodes = function( xpath, contextNode )
{
if ( document .all )// IE
{
if ( contextNode )
return contextNode.selectNodes( xpath )
else
return this.DOMDocument.selectNodes( xpath ) ;
}
else// Gecko
{
var aNodeArray = new Array()
var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument,
this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null)
if ( xPathResult )
{
var oNode = xPathResult.iterateNext () ;
while( oNode )
{
aNodeArray[aNodeArray.length] = oNode;
oNode = xPathResult.iterateNext()
}
}
return ;
}
}
FCKXml.prototype.SelectSingleNode = function( xpath, contextNode )
{
if ( document.all ) // IE
{
if ( contextNode )
return contextNode.selectSingleNode( xpath ) ;
else
return this.DOMDocument.selectSingleNode( xpath )
}
else// Gecko
{
var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument,
this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null)
if ( xPathResult && xPathResult.singleNodeValue )
return xPathResult.singleNodeValue;
else
return null
}
}