querySelector系列和getElement系列区别

querySelector系列

属于 W3C 中的 Selectors API 规范
querySeletor()返回一个对象
querySelectorAll()返回一个集合(NodeList)
参数均为:css selector字符串

获取页面I属性D为test的元素:
    document.querySelector("#test");
    document.querySelectorAll("#test")[0];
获取页面class属性为”red”的元素:
    document.querySelector('.red')
    document.querySelectorAll('.red')

getElement系列

属于 W3C 的 DOM 规范
getElementById()
getElementsByName()
getElementsByTagName()
getElementsByClassName()
参数为单一的id、tagName等

区别

querySelectorAll 返回的是一个 Static Node List
getElementsBy 系列的返回的是一个 Live Node List

// Demo 1
var ul = document.querySelectorAll('ul')[0],
    lis = ul.querySelectorAll("li");
for(var i = 0; i < lis.length ; i++){
    ul.appendChild(document.createElement("li"));
}

// Demo 2
var ul = document.getElementsByTagName('ul')[0], 
    lis = ul.getElementsByTagName("li"); 
for(var i = 0; i < lis.length ; i++){
    ul.appendChild(document.createElement("li")); 
}

Demo 1 中的 lis 是一个静态的 Node List,是一个 li 集合的快照,对文档的任何操作都不会对其产生影响。
Demo 2 中的 lis 是一个动态的 Node List, 每一次调用 lis 都会重新对文档进行查询,导致无限循环的问题。

再来看一个:

//Demo1
var temp = document.querySelectorAll(".class");
for (var i=0, max=temp.length; i<max; i++) { 
    temp[i].className = "new_class";
}
//Demo2
var temp = document.getElementsByClassName("class");
for (var i=0, max=temp.length; i<max; i++) { 
    temp[i].className = "new_class";
} 

假如获取到的temp的长度都为3,
Demo1能将三个元素的className全部更改为new_class”,
Demo2只能讲第一个元素和第三个元素的className更改为”new_class”.

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值