# querySelector和querySelectorAll小问题
我们可以使用 document.getElementById 这种来获取 dom 元素,但是我们更多使用 document.querySelector 这种来更方便的寻找 dom 元素。
# 问题
document.querySelector 是存在一个问题的,它是静态的。
<style>
div {
width: 100px;
height: 100px;
border: 1px solid blue;
}
</style>
<div></div>
<div></div>
<script>
var div = document.querySelectorAll('div');
var newDiv = document.createElement('div');
document.body.appendChild(newDiv);
for (var i = 0; i < div.length; i++) {
div[i].style.background = 'red';
}
</script>
我们会发现,div 一个都没有点亮,这是因为 querySelectorAll 拿到是一个静态列表,只要我们后续对元素改动,那么所有的都会失效。
修改,我们可以再appendChild 之后。重新获取一次静态列表即可。
var div = document.querySelectorAll('div');
<style>
div {
width: 100px;
height: 100px;
border: 1px solid blue;
}
</style>
<div></div>
<div></div>
<script>
var div = document.getElementsByTagName('div');
var newDiv = document.createElement('div');
document.body.appendChild(newDiv);
for (var i = 0; i < div.length; i++) {
div[i].style.background = 'red';
}
</script>
我们可以发现都点亮了,所以 getElementsByTagName 是获取的动态列表,只要后续添加,就可以动态加入。