querySelectorAll 和 getElementsBy系列区别

前端之家收集整理的这篇文章主要介绍了querySelectorAll 和 getElementsBy系列区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

querySelectorAll VS getElementsBy系列

发现一个有意思的东西

两者都可以用来查找元素,不过getElementsByClassName() 是为了HTML5所添加的API

索性查询了一下

发现知乎上讲解的也比较详细

区别1 : 接受参数不一样

var c1 = document.querySelectorAll('.b1 .c');
var c2 = document.getElementsByClassName('c');
var c3 = document.getElementsByClassName('b2')[0].getElementsByClassName('c');

可以看到querySelectorAll()接受的参数可以是 .xx .x这样的形式

区别2 : 返回的nodeList不一样

知乎上说大部分人都知道,看来我的js太渣了。
不过还好,现在我知道了哈哈哈哈

querySelector 返回的是一个static nodeList
而 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"));
}

demo2因为返回是Live Node List 所以会无限循环,而demo1因为是静态的就不会返回


总结:querySelector和querySelectorAll查询的结果不是动态的,其余的都是动态改变,而且querySelector和querySelectorAll中的css选择符支持正则

猜你在找的程序笔记相关文章