IE 内核对于执行 javascript 的几个严重 BUG

在写脚本的过程,有以下几个大的 BUG ,害我找答案找了 N 久。现把它写出来,希望大家少走点弯路。

 注: IE 6.0 以下版本会出现, 7.0 没测试过

一、文本转换成数字,parseInt 在 IE 中有一个严重的 BUG
        alert(parseInt("8")) → 执行结果为  0
        解决方法:改成  parseFloat("8").toFixed(0) → 保留小数点后 0 位数,即整数

二、document.getElementById 的方法执行有误
       document.all 在其它浏览器中不支持,所以我用的最多的是 document.getElementById。但是我发现,当控件的 ID 与名称相同的时候,document.getElementById 就出现错误了。例如:
       <input id="Txt_Name01" name="Txt_Name">
       <input id="Txt_Name" name="Txt_Name">
alert(document.getElementById("Txt_Name").id) 执行结果是  "Txt_Name01"
以此推断:document.getElementById 在 IE 中,先以 name 由上而下进行查找,没有找到控件的时候才以 id 进行查找。
解决方法,用另一方法代替。
document.getObjectById = function(id)
{
    if(document.all)
    {
        var obj = document.getElementById(id);
        if(obj == null){return null;}
        if(obj.id == id){return obj;}
        obj = document.getElementsByName(id);
        for(var i=0;i< obj.length;i++)
        {
            if(obj[i].id == id){return obj[i];}
        }
        return null;
    }
    else{return document.getElementById(id);}
}

三、 通过 select 节点的 innerHTML 设置下拉节点无效
        当两个 select 下拉框需要进行复制时,一个最快捷的方式就是用 innerHTML ,但 IE 的 BUG 却让我无话可说。例如:把 DDL_Dept 的下拉节点复制到 DDL_Dept02
<select id="DDL_Dept">
     <option>01</option>
     <option>02</option>
</select>
<select id="DDL_Dept02" style="width:20px">
     <option>03</option>
</select>

function CloneNode()
{
     var d1=document.getElementById("DDL_Dept");
     var d2=document.getElementById("DDL_Dept02");
    //d2.innerHTML = d1.innerHTML; 此句应该是最快的,但无效,只好变通一下了
    d2.innerHTML =""; //这句却是可以的,真是无语
    var re = /(<\/SELECT>)/gi;
    var t = d2.outerHTML.replace( re ,""); //先去掉</SELECT>
    d2.outerHTML = ot + d1.innerHTML+"</SELECT>";//再加上组合好的内容
}

以上代码只在 IE 内核的浏览器出现,FireFox 没有上述问题

 

转自:http://blog.csdn.net/cityhunter172/archive/2009/02/04/3862009.aspx

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值