document.getElementById和docuement.querySelector的区别

 习惯了用jQ查找元素,有时候我们不妨试试js原生的DOM选择符,getElementById()、getElementsByTagName()、querySelector()、querySelectorAll()。说不定一不小心就发现彩蛋了。

那么我们来说说上面那几个方法。

"querySelector 属于 W3C 中的 Selectors API 规范 。而 getElementsBy 系列则属于 W3C 的 DOM 规范"

---------------请忽略上面那句话----------------

还不如来点实际的。

1、区别

getXXXByXXX 获取的是动态集合,querySelector获取的是静态集合。

简单的说就是,动态就是选出的元素会随文档改变,静态的不会,取出来之后就和文档的改变无关了。

先看看一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<ul>
     <li>aaa</li>
     <li>ddd</li>
     <li>ccc</li>
</ul>
 
//demo1
var  ul = document.getElementsByTagName( 'ul' )[0],
       lis = ul.getElementsByTagName( "li" );
for ( var  i = 0; i < lis.length ; i++){
      ul.appendChild(document.createElement( "li" ));
}
console.log( lis.length);   //6
 
//demo2
var  ul = document.querySelectorAll( 'ul' ),
       lis = ul.querySelectorAll( "li" );
for ( var  i = 0; i < lis.length ; i++){
      ul.appendChild(document.createElement( "li" ));
}
console.log( lis.length);   //3

Demo1 中的 lis 是一个动态的 Node List, 每一次调用 lis 都会重新对文档进行查询,导致无限循环的问题。

2、性能

这里就不多讲了,大家可以参考:

https://jsperf.com/getelementsby-vs-queryselectorall/7

 

3、querySelector和querySelectorAll() 

 querySelector() 方法仅仅返回匹配指定选择器的第一个元素。如果你需要返回所有的元素,请使用 querySelectorAll() 方法替代。

 

4、总结

如果只要一次查找就可得到元素时,首选getXXXByXXX ;

如果需要经过多级查找,才能得到元素时,首选querySelector;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值