我遇到的Javascript 現(xiàn)象總結(jié)
1.事件轉(zhuǎn)移。
剛開始我用 var menu = window.event.srcElement; 來(lái)取得事件來(lái)源對(duì)象,事件是tr上的一個(gè)onclick事件,但是
在IE下其獲取到的對(duì)象是該tr下的中間那個(gè)td對(duì)象。當(dāng)然這個(gè)方法暫時(shí)在FIREFOX下不兼容。要解決這個(gè)兼容性問(wèn)題。只要
個(gè)方法帶個(gè)參數(shù)就好了,比如this,或者event……
2.在IE下DOM編程正常取到的對(duì)象在FIREFOX下變了。
當(dāng)時(shí)覺得奇怪,而后調(diào)試發(fā)現(xiàn):這個(gè)問(wèn)題實(shí)在是firefox不對(duì)啦。他將無(wú)意義無(wú)必要的空白解釋成了子節(jié)點(diǎn)。
比如說(shuō)<tr><td>1</td> <td>2</td></tr> 在IE下我們發(fā)現(xiàn)其子節(jié)點(diǎn)為2個(gè)。但是在firefox下,他理解為5個(gè)。“#text”表
示文本(實(shí)際是無(wú)意義的空格和換行等)在Firefox里也會(huì)被解析成一個(gè)節(jié)點(diǎn)。這里我們可以用判斷tagName來(lái)確定是否正確
,也可以用getElementsByTagName方法來(lái)彌補(bǔ)。lastChild firstChild 這些方法自然都發(fā)生了轉(zhuǎn)移……使用的話小心哦。
比如為了達(dá)到兼容。我添加了一些判斷。
while(oIMG.tagName != "IMG" )
{
oIMG = oIMG.previousSibling;
}
3.實(shí)現(xiàn)圖片變化效果,我原來(lái)用src動(dòng)態(tài)改變。因?yàn)閯傞_始是用了一堆代碼。
var menu = oObj;
//該TR 下的 TD 組
var aTD = oObj.getElementsByTagName("TD");
var len = aTD.length;
//最后一TD對(duì)象
//lastchild 以及 firstchild 屬性 在ff ie中不統(tǒng)一
//var oTD = oObj.lastChild;
var oTD = aTD[len-1];
//alert(oTD.innerHTML);
//最后一IMG對(duì)象
var oIMG = oTD.lastChild;
while(oIMG.tagName != "IMG" )
{
oIMG = oIMG.previousSibling;
}
if (oIMG.src.indexOf("Triumph_1") != -1)
{
oIMG.src = oIMG.src.replace(/Triumph_1/g, "Triumph_2");
}
感覺臃腫。
但是覺得每次這樣怪麻煩,于是用innerHTML:
if (menu.innerHTML.indexOf("Triumph_1") != -1)
{
var temp = menu.innerHTML.replace(/Triumph_1/g, "Triumph_2");
menu.innerHTML = temp;
}
結(jié)果發(fā)現(xiàn)不行。為什么呢?