Javascript 事件转移


我遇到的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;
 }
结果发现不行。为什么呢? 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值