zoukankan      html  css  js  c++  java
  • 用document.getElementsByTagName()返回的真的是数组吗?

    document.getElementsByTagName()返回的真的是数组吗?

    这是这几天开发中遇到的问题。
    一个如下的HTML结构:

    <ul>
    	<li>
    	<li>
    	...
    	<li>
    </ul>
    

    document.getElementsByTagName()方法获取其中的<li>节点:

    var li = document.getElementsByTagName("li");
    var content = li.slice(0,5);
    

    居然出现TypeError,这说明li中没有slice()方法,怎么会这样呢?
    于是我查了查li的原型:

    console.log(li.__proto__)
    /*
    Object {}
    constructor:HTMLCollection()
    item:item()
    length:(...)
    get length:()
    namedItem:namedItem()
    __proto__:Object
    */
    

    果然,li确实是一个数组,然而并没有继承自Array.prototype,而是一个HTML对象实例,也就是《JS高程》里所说的NodeList,所以我们不能直接使用任何数组方法,想要使用数组方法,我们可以借助call()apply(),比如:

    var content = Array.prototype.slice.apply(li,[0,5]);
    
  • 相关阅读:
    vue bus 中央事件总线
    0时间复杂度
    stack 数据结构
    es6 class
    directives 自定义指令
    node中间件
    数据结构博客清单
    TCP/IP 协议栈博客清单
    Java 面向对象:接口
    Java 面向对象:Object 类
  • 原文地址:https://www.cnblogs.com/taoshen/p/getelementbytagname-array.html
Copyright © 2011-2022 走看看