我遇到的Javascript 现象总结
1.事件转移。
刚开始我用 var menu = window.event.srcElement; 来取得事件来源对象,事件是tr上的一个onclick事件,但是
在IE下其获取到的对象是该tr下的中间那个td对象。当然这个方法暂时在FIREFOX下不兼容。要解决这个兼容性问题。只要
个方法带个参数就好了,比如this,或者event……
2.在IE下DOM编程正常取到的对象在FIREFOX下变了。
当时觉得奇怪,而后调试发现:这个问题实在是firefox不对啦。他将无意义无必要的空白解释成了子节点。
比如说<tr><td>1</td> <td>2</td></tr> 在IE下我们发现其子节点为2个。但是在firefox下,他理解为5个。“#text”表
示文本(实际是无意义的空格和换行等)在Firefox里也会被解析成一个节点。这里我们可以用判断tagName来确定是否正确
,也可以用getElementsByTagName方法来弥补。lastChild firstChild 这些方法自然都发生了转移……使用的话小心哦。
比如为了达到兼容。我添加了一些判断。
while(oIMG.tagName != "IMG" )
{
oIMG = oIMG.previousSibling;
}
3.实现图片变化效果,我原来用src动态改变。因为刚开始是用了一堆代码。
var menu = oObj;
//该TR 下的 TD 组
var aTD = oObj.getElementsByTagName("TD");
var len = aTD.length;
//最后一TD对象
//lastchild 以及 firstchild 属性 在ff ie中不统一
//var oTD = oObj.lastChild;
var oTD = aTD[len-1];
//alert(oTD.innerHTML);
//最后一IMG对象
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;
}
结果发现不行。为什么呢?
posted on 2007-09-19 08:52
-274°C 阅读(804)
评论(5) 编辑 收藏 所属分类:
web前端