Chinaunix首页 | 论坛 | 博客
  • 博客访问: 813631
  • 博文数量: 62
  • 博客积分: 526
  • 博客等级: 二等列兵
  • 技术积分: 2078
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-04 20:41
个人简介

博客迁移至 freefe.cc

文章分类

全部博文(62)

分类: 系统运维

2012-08-02 16:41:11

最近遇到一个很常见的JS在IE下的兼容性问题,其实也很简单,主要由于IE6下调试工具较少不好发现导致花费了挺多的时间。

首先说一下我遇见的关于getElementById的小小兼容性问题吧,都知道 document.getElementById 是获取DOM节点中指定id的节点,但是在IE6下,会把某些标签中(并不是所有标签)的name也当做 getElementById 可获取的元素,有时真会发生影响不到的坑。

我是在获取相应id节点后再插入一个div,没想到在head的标签内竟然将其name属性设置了可这个ID一样的名字。真是妹的我去了!!!IE6中只是看到该div不显示,真不容易发现其错误。关键是标签内无内容,弹出其innerHTML还未空。呵呵~
下面是一些有意思的代码:

下面代码在IE6下会获取正常的DOM节点:

  1. <body>
  2.         <p name="abc" id="cba">
  3.             这是第1个div
  4.         </p>
  5.         <div id="abc">
  6.             这是第2个div
  7.         </div>
  8.         <script language=javascript>
  9.             alert(document.getElementById("abc").id);
  10.         </script>
  11.     </body>

而下面代码就会有问题:

  1. <body>
  2.         <a name="abc" id="cba" href="">
  3.             这是第1个div
  4.         </a>
  5.         <div id="abc">
  6.             这是第2个div
  7.         </div>
  8.         <script language=javascript>
  9.             alert(document.getElementById("abc").id);
  10.         </script>
  11.     </body>
所以,对于IE6下 getElementById方法出现BUG也是针对于相关标签的。包括 meta标签 a标签 form标签以及一些相关表单元素。

主要解决方法是 注意整体的name使用,不要将name与id值混淆使用,这个是最优方式。
还有就是方法判断,这是司徒正南给的:

  1. var getElementById = function(id){
  2.         var el = document.getElementById(id);
  3.         if(!+"\v1"){
  4.           if(el && el.attributes['id'].value === id){
  5.             return el
  6.           }else{
  7.             var els = document.all[id],n = els.length;
  8.             for(var i=0;i<n;i++){
  9.               if(els[i].attributes['id'].value === id){
  10.                 return els[i]
  11.               }
  12.             }
  13.           }
  14.         }
  15.         return el;
  16.       }



阅读(2562) | 评论(0) | 转发(0) |
0

上一篇:毕业后~

下一篇:简单的快速排序

给主人留下些什么吧!~~