为什么for循环里面的length值没有动态更新?

来源:7-2 编程练习

慕先生的刀

2019-03-13 22:37:16

http://img.mukewang.com/climg/5c8914d400012a9518401330.jpg

老师你好,我想要新创建的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的长度不会改变。

页面中本身存在的元素改变之后,长度跟着改变,例如删除按钮中:

http://img.mukewang.com/climg/5c89b7320001405d10080146.jpg

每删除一次输出长度看一下:

http://img.mukewang.com/climg/5c89b7630001286513350386.jpg

代码中还有个问题,将原有的内容全部删除之后,点击添加元素的按钮,鼠标移入前三个不会改变背景颜色,可以将改变颜色的代码封装起来,在事件中调用。

可以重新修改测试下,祝学习愉快!

0

0 学习 · 4826 问题

查看课程