美文网首页
getByClass兼容className

getByClass兼容className

作者: 尤樊容 | 来源:发表于2016-11-29 23:31 被阅读39次

由于document.getElementsByClassName('class名');在IE8及以下版本不兼容所以需要封装一个函数getByClasss();
字符串切割

function getByClass(oParent,sClass){
  if(document.getElementsByClassName){ 
     return oParent.getElementsByClassName(sClass);
  }else{    
   //获取页面中所有元素    
    var aEle=oParent.getElementsByTagName('*'); 
    var arr=[]; //找个容器存className    
    for(var i=0;i<aEle.length;i++){ 
       //把每个元素的className用空格切开
        var tmp=aEle[i].className.split(' '); 
       //从数组里找想要的className 
       if(findInArr(tmp,sClass)){ 
           arr.push(aEle[i]);
        } 
     } 
   return arr;
  }
}

在数组中找相同的className

function findInArr(arr,n){
    for (var i=0;i<arr.length;i++) {
       if(arr[i]==n)return true;
    }
    return false;
};

正则实现,不需要findInArr函数

function getByClass(oParent,sClass){ 
     if(document.getElementsByClassName){ 
        return oParent.getElementsByClassName(sClass);
      }else{
//ie 6 7 8 
        var arr=[];
         var aEle=oParent.getElementsByTagName('*');
         for(var i=0;i<aEle.length;i++){
//          var arr2=aEle[i].className.split(/\s+/);
//          if(findArr(arr2,sClass)){
//             arr.push(aEle[i]);
//          }            
          var reg=new RegExp('\\b'+sClass+'\\b');  
          if(reg.test(aEle[i].className)){ 
              arr.push(aEle[i]);
            } 
        }
         return arr; 
     }
  };

相关文章

网友评论

      本文标题:getByClass兼容className

      本文链接:https://www.haomeiwen.com/subject/sfszpttx.html