美文网首页
getElementByClassName方法实现原理

getElementByClassName方法实现原理

作者: daisx | 来源:发表于2017-05-01 10:37 被阅读0次

实现思想:筛选。

  • 第一步:划定查找筛选范围;选定所有元素。
  • 第二步:遍历每一个被选中的元素。
  • 第三步:如果满足了条件,就会将选择的元素放入一个数组。
  • 第四步:给出一个返回数组,便于调用。
<body>
<div id="box">
    <ul>
        <li>1</li>
        <li class="box">2</li>
        <li>3</li>
        <li class="box">4</li>
        <li>5</li>
    </ul>
</div>
<script>
    window.onload = function () {
        function getClassName(){
              var allElement=document.getElementsByTagName('*');//用*获取所有的元素。
            console.log(allElement);
            var arr=[];//声明一个数组用来存取获取到元素

           for(var i=0;i<allElement.length;i++){
                  if(allElement[i].className=="box"){
                      console.log(1);
                      arr.push(allElement[i]);
                  }
               }
            return arr;
       }
        var aLi=getClassName();
        console.log(aLi);
    }
</script>
</body>

上述代码基本实现了classname的查找方法,然后就是将此函数封装抽取成为一个方法:具体的实现步骤就是提取公共部分代码。

function getClassName(className){
              var allElement=document.getElementsByTagName('*');
            var arr=[];
           for(var i=0;i<allElement.length;i++){
                  if(allElement[i].className==className){
                      arr.push(allElement[i]);
                  }
               }
            return arr;
       }

在HTML文档中因引入getClassName("box"),就可以得到相应的元素节点。


特殊情况考虑:

  • 第一:同一个元素有多个类名的情况,同一个元素有多个重名的情况,会出现多次选中,其实只需要在第一次查找以后如果出现了我们需要的元素后,就可以在循环中加入一个break就可以。
  • 第二:同一个document下,出现了多个相同类名元素:例如
<div id="box">
    <ul>
        <li>1</li>
        <li class="box">2</li>
        <li>3</li>
        <li class="box">4</li>
        <li>5</li>
    </ul>
</div>
<div id="box">
    <ul>
        <li>1</li>
        <li class="box">2</li>
        <li>3</li>
        <li class="box">4</li>
        <li>5</li>
    </ul>
</div>

代码改进:将搜索的区域进行手动删选就可以,具体实现方式如下代码:

function getClassName(arr,TagName,className){
              var allElement=arr.getElementsByTagName('TagName');
            var arr=[];
           for(var i=0;i<allElement.length;i++){
                  if(allElement[i].className==className){
                      arr.push(allElement[i]);
                  }
               }
            return arr;
       }

相关文章

网友评论

      本文标题:getElementByClassName方法实现原理

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