美文网首页
HTMLCollection对象

HTMLCollection对象

作者: 狗运天神 | 来源:发表于2018-12-25 14:43 被阅读0次
    1. HTMLCollection是什么:

      • 它是HTML DOM对象的一个接口,这个接口包含了获取到的DOM元素集合,返回的类型是Object。

      • 它很像数组,又不是数组,如果你想使用数组的一些方法操作这个集合,那么不好意思。

      • 它是及时更新的,当文档中的DOM变化是,它是会随之变化的。

      • 属性:HTMLCollection.length,返回集合当中子元素的数目。

      • 它有自带的方法

            1.HTMLCollection.item(index),参数为下标,返回具体的节点。
            2.HTMLCollection.namedItem(value),参数为字符串,返回具体的节点。
        
    2. 什么时候我们会获取到HTMLCollection对象?
      简单,我们获取dom元素就会获取到的。

      <ul>
          <li>1</li>
          <li>2</li>
          <li>3</li>
          <li>4</li>
          <li>5</li>
          <li>6</li>
          <li>7</li>
      </ul>
      <script type="text/javascript">
          var lis= document.getElementsByTagName("li");
          console.log(lis);
          console.log(typeof lis);
      </script>
      

      运行结果:


      image.png

    3.怎么获取HTMLCollection对象的下标?

    通过HTMLCollection.item(index)和HTMLCollection.namedItem(value)获取到的都是DOM节点,那怎么获取到指定节点的下标呢,这个官方是没有提供相应的方法的,下面我们通过一个例子实现一下。

    需求:ul列表中点击子级li,打印li对应的下标。

    说下我的初始想法,既然HTMLCollection是个对象,那么indexof这种操作显然很瞎,既然不能使用数组的方法控制它,那我就把它编程数组,然后就用for循环balabala....写了一大堆,将它转为数组,再写点击事件查找下标,效果实现是实现了,可特么太费劲了,看看这代码量

        var lis= document.getElementsByTagName("li");
        var ul = document.getElementsByTagName("ul")[0];
        //=======================看下面==========================
        var newArr = [];
        for(var i in lis){
            newArr.push(lis[i])
        }
        //=======================看下面==========================
        //事件委托绑定事件
        ul.onclick = function(e){
            var even = e||event;
            var target = even.target;
            if(target.nodeName.toLowerCase() == "li"){
                //=======================看下面==========================
                var index = newArr.indexOf(target)
                return index;
                //=======================看下面==========================
            }
        }
    

    emmmm......两次循环,效果实现
    现在换种方法,直接操作HTMLCollection对象

        var arr= document.getElementsByTagName("li");
        var ul = document.getElementsByTagName("ul")[0];
        ul.onclick = function(e){
            var even = e||event;
            var target = even.target;
            if(target.nodeName.toLowerCase() == "li"){
                //=======================看下面==========================
                for(var k in arr){
                    if(arr[k] == target)return k;
                }
                //=======================看上面==========================
            }
        }
    

    good~~~ 一次循环就搞定

    相关文章

      网友评论

          本文标题:HTMLCollection对象

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