zoukankan      html  css  js  c++  java
  • javascript解决getElementById()的bug以及getElementsByClassName的兼容性写法

    <a name="target" href="#">链接</a>
    <p id="target">文字说明</p>
    

    一、 以上代码中都可以通过document.getElementById("target")获取a标签和p标签,这就是getElementById()的bug所在;

     1 <script>
     2         var getElementById=function(id){
     3                 var el=document.getElementById(id);
     4                 if(!+"v1"){                                  //判断浏览器 if(!+"v1"){} IE浏览器中对v1转换成v1 其他浏览器转换成1,!表示取反,IE浏览器中对!v1理解为true
     5                      if(el&&el.id==id){
     6                              return el;
     7                        }else{
     8                             var els=document.all[id],
     9                                  n=els.length;
    10                             for(var i=0;i<n;i++){
    11                                 if(els[i].id==id){
    12                                      return els[i];
    13                                  }
    14                             }
    15                        }
    16                 } 
    17                return el; 
    18         };
    19 </script>        

    二、getElementsByClassName的兼容性写法

     1 var getElementsByClassName = function(opts) {
     2     var searchClass = opts.searchClass;
     3     var node = opts.node || document;
     4     var tag = opts.tag || '*';
     5     var result = [];
     6 
     7     if (document.getElementsByClassName) {
     8         var nodes = node.getElementsByClassName(searchClass);
     9         if (tag !== "*") {
    10             for (var i = 0; node = nodes[i++];) {
    11                 if (node.tagName === tag.toUpperCase()) {
    12                     result.push(node);
    13                 }
    14             }
    15         } else {
    16             result = nodes;
    17         }
    18         return result;
    19     } else {
    20         var els = node.getElementsByTagName(tag);
    21         var elsLen = els.length;
    22         var i, j;
    23         var pattern = new RegExp("(^|\s)" + searchClass + "(\s|$)");
    24         for (i = 0, j = 0; i < elsLen; i++) {
    25             if (pattern.test(els[i].className)) {
    26                 result[j] = els[i];
    27                 j++;
    28             }
    29         }
    30         return result;
    31     }
    32 }
  • 相关阅读:
    android开发(1) 登录界面的布局演示
    android开发(5) 动态生成控件
    android开发(6) 初遇handler
    android开发(2) 九宫格的实现
    android开发(8) 选项卡的切换
    android开发(9) 渐变动画演示(Tween Animation)
    android开发(8) 使用ViewFlipper来用手势切换画面
    css textarea固定大小不显示滚动条
    css zindex
    js ie input onchange事件兼容BUG
  • 原文地址:https://www.cnblogs.com/layaling/p/8652023.html
Copyright © 2011-2022 走看看