• nodelist 与 HTMLCollection 的区别


    原地址 https://cloud.tencent.com/developer/article/2013289

    节点与元素

    根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:

    • 整个文档是一个文档节点
    • 每个 HTML 元素是元素节点
    • HTML 元素内的文本是文本节点
    • 每个 HTML 属性是属性节点
    • 注释是注释节点

    以下示例

    1. <div id="user">
    2. <p id="demo" class="text-info">Hello</p>
    3. </div>

    每个 HTML 元素是元素节点,所以

    是一个元素节点,

    也是元素节点。

    Hello

    元素有属性和文本,所以class="text-info"id="demo"是属性节点,Hello是文本节点。 从上面例子可以看出,节点包含了元素,元素是属于节点的一种。

    element 元素对象

    节点都是单个对象,有时会需要一种数据结构,能够容纳多个节点。DOM提供两种集合对象,用于实现这种节点的集合:NodeList和HTMLCollection。

    • HTMLCollection 是表示 HTML 元素的集合。
    • NodeList 对象代表一个有顺序的节点列表

    以下方法获取的为element 元素对象

    • document.getElementById(“id属性”)
    • document.querySelector(‘css选择器’)

    示例

    1. // getElementById返回元素
    2. element1 = document.getElementById('user');
    3. console.log(element1) // 返回整个div 元素<div id="user"><p id="demo" class="text-info">Hello</p></div>
    4. element2 = document.getElementById('demo');
    5. console.log(element2) // <p id="demo" class="text-info">Hello</p>
    6. // querySelector返回元素
    7. element1 = document.querySelector('#user');
    8. console.log(element1) // 返回整个div 元素<div id="user"><p id="demo" class="text-info">Hello</p></div>
    9. element2 = document.querySelector('#demo');
    10. console.log(element2) // <p id="demo" class="text-info">Hello</p>
    11. element3 = document.querySelector('p');
    12. console.log(element3) // <p id="demo" class="text-info">Hello</p>
    13. element4 = document.querySelector('.text-info');
    14. console.log(element4) // <p id="demo" class="text-info">Hello</p>
    15. element5 = document.querySelector('p.text-info');
    16. console.log(element5) // <p

    HTMLCollection 对象

    HTMLCollection只能包含 元素节点(ElementNode)类型的节点, 以下方法返回HTMLCollection对象

    • document.getElementsByClassName(“className”)
    • document.getElementsByTagName(“tag名称”)
    • document.forms  // 对象选择器查找 HTML 对象
    1. <div id="user">
    2. <p id="demo" class="text-info">Hello</p>
    3. <p>Hello</p>
    4. </div>

    使用示例

    1. elements = document.getElementsByClassName("text-info");
    2. console.log(elements); // HTMLCollection
    3. console.log(elements.length); // 获取个数
    4. // 索引取值
    5. console.log(elements[0]); // 下标取值 <p id="demo" class="text-info">Hello</p>
    6. // item 根据下标取值
    7. console.log(elements.item(0));
    8. // namedItem 根据id 或name属性取值
    9. console.log(elements.namedItem('demo'));

    HTMLCollection 对象中的属性和方法:

    属性 / 方法

    参数

    描述

    length

    返回 HTMLCollection 中元素的数量。

    item()

    索引 number类型

    返回 HTMLCollection 中指定索引的元素。

    namedItem()

    字符串,传元素的id或name名称,如果id找不到就找name

    返回 HTMLCollection 中指定 ID 或 name 属性的元素。

    namedItem() 方法返回 HTMLCollection 对象中指定 ID 或 name 的元素。

    1. HTMLCollection.namedItem(name)
    2. HTMLCollection[name]

    使用示例,以下两种方法都可以

    1. // namedItem 根据id 或name属性取值
    2. console.log(elements.namedItem('demo'));
    3. // 也可以直接中括号里面传id或name属性
    4. console.log(elements['demo']);

    NodeList 对象

    NodeList 是表示节点的集合。

    NodeList 对象中的属性和方法: | 属性 / 方法 | 参数    | 描述                                     | | ————   |————— | ——————————————————— | | length     | 无    | 返回 NodeList 中的数量。             | | item()     | 索引 number类型   | 返回 NodeList 中指定索引的节点。           |

    以下方法获取的为NodeList对象

    • document.getElementsByName(“name名称”)
    • document.querySelectorAll(“css选择器”)
    • element.childNodes  // 获取元素的子节点
    1. <form id="form-user">
    2. <label for="user-id">用户名</label>
    3. <input id="user-id" name="username" value="yoyo">
    4. </form>
    5. <div id="user">
    6. <p id="demo" class="text-info">Hello</p>
    7. <p>Hello</p>
    8. </div>

    使用示例

    1. nodes = document.getElementsByName('username');
    2. console.log(nodes) // NodeList [input#user-id]
    3. // length 属性
    4. console.log(nodes.length) //1
    5. // 索引取值
    6. console.log(nodes[0]) // <input id="user-id" name="username" value="yoyo">
    7. // item索引取值
    8. console.log(nodes.item(0)) // <input id="user-id" name="username" value="yoyo">

    document.querySelectorAll()也一样

    1. nodes = document.querySelectorAll('#user');
    2. console.log(nodes); // NodeList [div#user]
    3. console.log(nodes.length); // 1
    4. // 索引取值
    5. console.log(nodes[0]) // <input id="user-id" name="username" value="yoyo">
    6. // item索引取值
    7. console.log(nodes.item(0)) // <input id="user-id" name="username" value="yoyo">

    element.childNodes 是获取元素的子节点

    1. element = document.getElementById('user');
    2. // childNodes 所有的子节点
    3. console.log(element.childNodes);
    4. console.log(element.childNodes.length); // 5

    HTMLCollection与NodeList区别

    HTMLCollection 是表示 HTML 元素的集合,元素也是节点的一种,也就是元素节点,NodeList 是表示节点的集合 我们可以理解为 HTMLCollection 是 Nodelist 集合的一种。

    差异

    HTMLCollection

    NodeList

    length

    item()

    namedItem

    forEach

    索引取值

    可以

    可以

    节点类型

    元素节点

    任意节点:文本节点、元素节点、属性节点、注释节点

    HTMLCollection 不是一个数组!HTMLCollection 看起来可能是一个数组,但其实不是。 你可以像数组一样,使用索引来获取元素。 HTMLCollection 无法使用数组的方法:valueOf(), pop(), push(), 或 join()

    NodeList节点列表不是一个数组!NodeList节点列表看起来可能是一个数组,但其实不是。 你可以像数组一样,使用索引来获取元素。 节点列表无法使用数组的方法:valueOf(), pop(), push(), 或 join() 。

  • 相关阅读:
    SSM咖啡点餐管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目
    基于Android studio智能快递柜存放取物系统java
    4.企业快速开发平台Spring Cloud+Spring Boot+Mybatis之Highcharts 配置选项详细说明
    Windows版 PostgreSQL 利用 pg_upgrade 进行大版升级操作
    秒杀:只出现一次的数字系列
    PacBio HiFi 测序动植物基因组项目真实案例测评
    ubuntu中使用QT、C++使用redis、hiredis记录
    第5章 C语言高级的库函数
    Java复习六:内部类+异常处理
    第五章. 可视化数据分析分析图表—图表的常用设置2
  • 原文地址:https://blog.csdn.net/miin_ying/article/details/134184092