为什么for循环里面的length值没有动态更新?
来源:7-2 编程练习
慕先生的刀
2019-03-13 22:37:16
老师你好,我想要新创建的li标签也有鼠标效果,用的document.getElementsByTagName获取的元素类数组,长度可以动态更新,但为啥只有下面的文本数字实现了动态,而for循环里的没有动态更新呢?
以下是script部分代码:
(function(){
var btnAdd = document.querySelector('#btnAdd');
var btnRemove = document.querySelector('#btnRemove');
var list = document.querySelector('#list');// 获取ul元素
var lis = document.getElementsByTagName('li');// 获取li标签类数组,动态
var li = null;
for(var i = 0; i < lis.length; i++){
lis[i].onmouseenter = function() {
this.style.backgroundColor = 'purple';
};
lis[i].onmouseleave = function() {
this.style.backgroundColor = 'orange';
};
}
//点击删除元素
btnRemove.onclick = function(){
(lis.length >=1)? list.removeChild(list.lastElementChild):null;
};
//点击创建元素
btnAdd.onclick = function () {
li = document.createElement('li');
li.appendChild(document.createTextNode('我是li'+(lis.length+1)));
list.appendChild(li);
};
})()
1回答
好帮手慕星星
2019-03-14
你好,可以这样理解,通过js动态添加的元素,虽然显示在页面上,但是不是真正属于页面的(自己写代码html结构中并没有改变),所以li的长度不会改变。
页面中本身存在的元素改变之后,长度跟着改变,例如删除按钮中:
每删除一次输出长度看一下:
代码中还有个问题,将原有的内容全部删除之后,点击添加元素的按钮,鼠标移入前三个不会改变背景颜色,可以将改变颜色的代码封装起来,在事件中调用。
可以重新修改测试下,祝学习愉快!
相似问题