这是因为getElementById再结合children属性获取的是DOM元素,而querySelectorAll获取的则是NodeList对象元素。前者会随页面DOM结构的变化而变化,比如删除了box中的一个div,这个div就会从children中被“真实地”删掉,children.length的计数也会减1。而后者如果删除其中的某个子元素,被删的元素并不会消失,而是变成一个空对象,children1.length的计数也不会改变,这样的话 for(var i=0;i 改成这样就没问题了: for(var i=0;i box.removeChild(children1[i]); }