IE與firefox下Dhtml的一些區(qū)別小結(jié)
更新時間:2009年12月02日 01:13:27 作者:
IE與Mozilla下Dhtml的一些區(qū)別小結(jié)
1.DOM上的接口基本上還是一致的,但經(jīng)測試發(fā)現(xiàn)mozilla下的DOM更標(biāo)準(zhǔn)些,就算些法一樣,IE下會有一些微小的區(qū)別,但無關(guān)要緊
2.事件模型上,這方面區(qū)別算比較大.
mozilla下的e.target 相當(dāng)于 ie下的event.srcElement,但細節(jié)上有區(qū)別,后者是返回一個html element
而e.target返回的是個節(jié)點,也就是說包括文本節(jié)點,方法可以這樣
var trg = e.target;
while(trg.nodeType!=1)trg=trg.parentNode;
mozilla下的e.which與ie下的event.keyCode相當(dāng)
相對應(yīng)的還有e.layerX,e.layerY,e.pageX,e.pageY...
可以看看http://fason.nease.net/mozilla/dom/ event部份
事件綁定上mozilla用addEventListener,removeEventListener,對應(yīng)ie的attachEvent,detatchEvent
3.對象引用上就直接document.getElementById就行了,如果還要兼容ie4,可以再加上document.all判斷
form element的引用要標(biāo)準(zhǔn)些var oInput = document.formName.elements["input1"]
4.XML的應(yīng)用上區(qū)別更大些,因為IE下是通過activex來創(chuàng)建,而mozilla已經(jīng)是有這些對象的(需要dom2支持)
Xmldomdocument: var doc = document.inplementation.createDocument("","",null)
xmlhttp: var req = new XMLHttpRequest()
5.innerText就在mozilla不支持了,需要用些range的技巧來取得它的text
6.insertAdjacentHTML是個比較好用的方法,mozilla可以用DOM的方法insertBefore來兼容
7.更細微的,如Array,Date的一些方法ie和mozilla也會有一些微小的區(qū)別,具體不提到了。。。
寫了兩個例子:
1. 對于通過ID取對象
function getObjectById(id)
{
if (typeof(id) != "string" || id == "") return null;
if (document.all) return document.all(id);
if (document.getElementById) return document.getElementById(id);
try {return eval(id);} catch(e){ return null;}
}
2. 對事件附加處理函數(shù)
if(document.attachEvent)
window.attachEvent("onresize", function(){reinsert();});
else
window.addEventListener('resize', function(){reinsert();}, false);
注意在IE里是 onclick 而在firefox NS 里則是 click
用腳本提交
document.formName.action = "...";
document.formName.submit();
好像在mozilla下不能用
處理XML的方法
var FCKXml = function()
{}
FCKXml.prototype.GetHttpRequest = function()
{
if ( window.XMLHttpRequest )// Gecko
return new XMLHttpRequest() ;
else if ( window.ActiveXObject )// IE
return new ActiveXObject("MsXml2.XmlHttp") ;
}
FCKXml.prototype.LoadUrl = function( urlToCall, asyncFunctionPointer )
{
var oFCKXml = this ;
var bAsync = ( 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( 'Error loading "' + 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 aNodeArray ;
}
}
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 ;
}
}
2.事件模型上,這方面區(qū)別算比較大.
mozilla下的e.target 相當(dāng)于 ie下的event.srcElement,但細節(jié)上有區(qū)別,后者是返回一個html element
而e.target返回的是個節(jié)點,也就是說包括文本節(jié)點,方法可以這樣
var trg = e.target;
while(trg.nodeType!=1)trg=trg.parentNode;
mozilla下的e.which與ie下的event.keyCode相當(dāng)
相對應(yīng)的還有e.layerX,e.layerY,e.pageX,e.pageY...
可以看看http://fason.nease.net/mozilla/dom/ event部份
事件綁定上mozilla用addEventListener,removeEventListener,對應(yīng)ie的attachEvent,detatchEvent
3.對象引用上就直接document.getElementById就行了,如果還要兼容ie4,可以再加上document.all判斷
form element的引用要標(biāo)準(zhǔn)些var oInput = document.formName.elements["input1"]
4.XML的應(yīng)用上區(qū)別更大些,因為IE下是通過activex來創(chuàng)建,而mozilla已經(jīng)是有這些對象的(需要dom2支持)
Xmldomdocument: var doc = document.inplementation.createDocument("","",null)
xmlhttp: var req = new XMLHttpRequest()
5.innerText就在mozilla不支持了,需要用些range的技巧來取得它的text
6.insertAdjacentHTML是個比較好用的方法,mozilla可以用DOM的方法insertBefore來兼容
7.更細微的,如Array,Date的一些方法ie和mozilla也會有一些微小的區(qū)別,具體不提到了。。。
寫了兩個例子:
1. 對于通過ID取對象
function getObjectById(id)
{
if (typeof(id) != "string" || id == "") return null;
if (document.all) return document.all(id);
if (document.getElementById) return document.getElementById(id);
try {return eval(id);} catch(e){ return null;}
}
2. 對事件附加處理函數(shù)
if(document.attachEvent)
window.attachEvent("onresize", function(){reinsert();});
else
window.addEventListener('resize', function(){reinsert();}, false);
注意在IE里是 onclick 而在firefox NS 里則是 click
用腳本提交
document.formName.action = "...";
document.formName.submit();
好像在mozilla下不能用
處理XML的方法
復(fù)制代碼 代碼如下:
var FCKXml = function()
{}
FCKXml.prototype.GetHttpRequest = function()
{
if ( window.XMLHttpRequest )// Gecko
return new XMLHttpRequest() ;
else if ( window.ActiveXObject )// IE
return new ActiveXObject("MsXml2.XmlHttp") ;
}
FCKXml.prototype.LoadUrl = function( urlToCall, asyncFunctionPointer )
{
var oFCKXml = this ;
var bAsync = ( 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( 'Error loading "' + 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 aNodeArray ;
}
}
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 ;
}
}
相關(guān)文章
詳解JavaScript中Promise的原理與應(yīng)用
Promise是JavaScript中的一個重要概念,也是現(xiàn)代JavaScript開發(fā)中必不可少的一部分,本文主要介紹了Promise的實現(xiàn)原理、使用方法及常見應(yīng)用場景,需要的可以收藏一下2023-06-06微信小程序自定義toast實現(xiàn)方法詳解【附demo源碼下載】
這篇文章主要介紹了微信小程序自定義toast實現(xiàn)方法,簡單描述了微信小程序自帶toast使用方法,并結(jié)合實例形式分析了自定義toast的定義與使用方法,需要的朋友可以參考下2017-11-11js加載之使用DOM方法動態(tài)加載Javascript文件
傳統(tǒng)上,加載Javascript文件都是使用script標(biāo)簽,我們也可以使用DOM方法,動態(tài)加載Javascript文件,具體實現(xiàn)如下,感興趣的朋友可以參考下2013-11-11localstorage實現(xiàn)帶過期時間的緩存功能
這篇文章主要介紹了localstorage實現(xiàn)帶過期時間的緩存功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06判斷目標(biāo)是否是window,document,和擁有tagName的Element的代碼
判斷目標(biāo)是否是window,document,和擁有tagName的Element的代碼,需要的朋友可以參考下。2010-05-05JS數(shù)組實現(xiàn)分類統(tǒng)計實例代碼
本文通過實例代碼給大家介紹了js數(shù)組實現(xiàn)分類統(tǒng)計的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09