zoukankan      html  css  js  c++  java
  • 解决 IE 或者兼容模式不支持 document.getElementsByClassName() 的方法

    网页错误详细信息
    消息: 对象不支持此属性或方法

    document.getElementsByClassName('element_name')

    需要自己实现下该方法,因为ie5之前的版本并不支持这个方法

    有以下四种方法,第四种兼容性最好

    一、

    //create method getElementsByClassName for document  
        if(!document.getElementsByClassName){  
            document.getElementsByClassName = function(className, element){  
                var children = (element || document).getElementsByTagName('*');  
                var elements = new Array();  
                for (var i=0; i<children.length; i++){  
                    var child = children[i];  
                    var classNames = child.className.split(' ');  
                    for (var j=0; j<classNames.length; j++){  
                        if (classNames[j] == className){   
                            elements.push(child);  
                            break;  
                        }  
                    }  
                }   
                return elements;  
            };  
        }

    二、

    function getElementsByClassName(oElm, strTagName, strClassName){
        var arrElements = (strTagName == "*" && oElm.all)? oElm.all :
            oElm.getElementsByTagName(strTagName);
        var arrReturnElements = new Array();
        strClassName = strClassName.replace(/-/g, "\-");
        var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)");
        var oElement;
        for(var i=0; i < arrElements.length; i++){
            oElement = arrElements[i];
            if(oRegExp.test(oElement.className)){
                arrReturnElements.push(oElement);
            }
        }
        return (arrReturnElements)
    }

    三、

    var getElementsByClass = function(searchClass,node,tag) {
            var classElements = new Array();
            if ( node == null )
                    node = document;
            if ( tag == null )
                    tag = '*';
            var els = node.getElementsByTagName(tag);
            var elsLen = els.length;
            var pattern = new RegExp("(^|\s)"+searchClass+"(\s|$)");
            for (i = 0, j = 0; i < elsLen; i++) {
                    if ( pattern.test(els[i].className) ) {
                            classElements[j] = els[i];
                            j++;
                    }
            }
            return classElements;
    }

    四、

    var getElementsByClassName = function (searchClass, node,tag) {
      if(document.getElementsByClassName){
        var nodes =  (node || document).getElementsByClassName(searchClass),result = [];
          for(var i=0 ;node = nodes[i++];){
            if(tag !== "*" && node.tagName === tag.toUpperCase()){
              result.push(node)
            }
          }
          return result
        }else{
          node = node || document;
          tag = tag || "*";
          var classes = searchClass.split(" "),
          elements = (tag === "*" && node.all)? node.all : node.getElementsByTagName(tag),
          patterns = [],
          current,
          match;
          var i = classes.length;
          while(--i >= 0){
            patterns.push(new RegExp("(^|\s)" + classes[i] + "(\s|$)"));
          }
          var j = elements.length;
          while(--j >= 0){
            current = elements[j];
            match = false;
            for(var k=0, kl=patterns.length; k<kl; k++){
              match = patterns[k].test(current.className);
              if (!match)  break;
            }
            if (match)  result.push(current);
          }
          return result;
        }
      }

    原文地址:http://blog.csdn.net/u011483807/article/details/49177147

  • 相关阅读:
    网络嗅探器
    struct udphdr
    struct tcphdr
    struct iphdr
    socket函数
    SQL SERVER-解析Extendevent文件数据
    SQL SERVER-日期按时区转换
    SQL SERVER-CROSS APPLY
    WinServer-文件共享端口
    SQL SERVER-修改实例的排序规则
  • 原文地址:https://www.cnblogs.com/Han39/p/7206613.html
Copyright © 2011-2022 走看看