IE與firefox下Dhtml的一些區(qū)別小結(jié)
2.事件模型上,這方面區(qū)別算比較大.
mozilla下的e.target 相當(dāng)于 ie下的event.srcElement,但細(xì)節(jié)上有區(qū)別,后者是返回一個(gè)html element
而e.target返回的是個(gè)節(jié)點(diǎn),也就是說(shuō)包括文本節(jié)點(diǎn),方法可以這樣
var trg = e.target;
while(trg.nodeType!=1)trg=trg.parentNode;
mozilla下的e.which與ie下的event.keyCode相當(dāng)
相對(duì)應(yīng)的還有e.layerX,e.layerY,e.pageX,e.pageY...
可以看看http://fason.nease.net/mozilla/dom/ event部份
事件綁定上mozilla用addEventListener,removeEventListener,對(duì)應(yīng)ie的attachEvent,detatchEvent
3.對(duì)象引用上就直接document.getElementById就行了,如果還要兼容ie4,可以再加上document.all判斷
form element的引用要標(biāo)準(zhǔn)些var oInput = document.formName.elements["input1"]
4.XML的應(yīng)用上區(qū)別更大些,因?yàn)镮E下是通過(guò)activex來(lái)創(chuàng)建,而mozilla已經(jīng)是有這些對(duì)象的(需要dom2支持)
Xmldomdocument: var doc = document.inplementation.createDocument("","",null)
xmlhttp: var req = new XMLHttpRequest()
5.innerText就在mozilla不支持了,需要用些range的技巧來(lái)取得它的text
6.insertAdjacentHTML是個(gè)比較好用的方法,mozilla可以用DOM的方法insertBefore來(lái)兼容
7.更細(xì)微的,如Array,Date的一些方法ie和mozilla也會(huì)有一些微小的區(qū)別,具體不提到了。。。
寫(xiě)了兩個(gè)例子:
1. 對(duì)于通過(guò)ID取對(duì)象
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. 對(duì)事件附加處理函數(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 ;
}
}
相關(guān)文章
詳解JavaScript中Promise的原理與應(yīng)用
Promise是JavaScript中的一個(gè)重要概念,也是現(xiàn)代JavaScript開(kāi)發(fā)中必不可少的一部分,本文主要介紹了Promise的實(shí)現(xiàn)原理、使用方法及常見(jiàn)應(yīng)用場(chǎng)景,需要的可以收藏一下2023-06-06微信小程序自定義toast實(shí)現(xiàn)方法詳解【附demo源碼下載】
這篇文章主要介紹了微信小程序自定義toast實(shí)現(xiàn)方法,簡(jiǎn)單描述了微信小程序自帶toast使用方法,并結(jié)合實(shí)例形式分析了自定義toast的定義與使用方法,需要的朋友可以參考下2017-11-11js加載之使用DOM方法動(dòng)態(tài)加載Javascript文件
傳統(tǒng)上,加載Javascript文件都是使用script標(biāo)簽,我們也可以使用DOM方法,動(dòng)態(tài)加載Javascript文件,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下2013-11-11localstorage實(shí)現(xiàn)帶過(guò)期時(shí)間的緩存功能
這篇文章主要介紹了localstorage實(shí)現(xiàn)帶過(guò)期時(shí)間的緩存功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06html+js實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器代碼(加減乘除)
下面小編就為大家?guī)?lái)一篇html+js實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器代碼(加減乘除)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07判斷目標(biāo)是否是window,document,和擁有tagName的Element的代碼
判斷目標(biāo)是否是window,document,和擁有tagName的Element的代碼,需要的朋友可以參考下。2010-05-05echarts實(shí)現(xiàn)晶體球面投影的實(shí)例教程
這篇文章主要給大家介紹了關(guān)于echarts實(shí)現(xiàn)晶體球面投影的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10JS數(shù)組實(shí)現(xiàn)分類(lèi)統(tǒng)計(jì)實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家介紹了js數(shù)組實(shí)現(xiàn)分類(lèi)統(tǒng)計(jì)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09