3.13(变量声明的提前)

本文探讨了动态添加页面元素后,如何正确获取并输出元素长度为0的问题,分析了原因,并提供了使用setTimeout、Promise和生成器函数的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:问题描述

  在写项目的时候通过动态添加的一些元素(页面加载时就添加上的)然后获取他的元素再输出他得到的是下面的东西

//添加完元素获取
let Food_Delete = document.getElementsByClassName("Food_Delete");
 console.log(Food_Delete.length);

在这里插入图片描述但是我们再输出他的lenth属性发现他是0在这里插入图片描述
再输出他每一元素会发现他是undefined。

二:问题出现原因

  再加载页面时浏览器会把变量提前声明并赋初值为undefined,但是为什么会输出他本身会出现一个节点伪数组,而输出他的lenth属性会是0呢?那是因为输出他的lenth属性的语句在添加元素之前。他的初值就是undefined,同时也没有lenth属性。其本质就是我们在输出时他并没有他应该有的值而是undefined,在输出后才有他该有的值。

三:解决方案

  我们既然知道了事情的原因,我们就可以解决了。最简单的解决方案就是把这个语句放到计时器里边

setTimeout(function () {
      console.log(Food_Delete.length);
        }, 1000);

还有就是使用ES6里边的promise对象,通过每层函数的执行结果来实现一环套一环的函数执行。
还有就是使用生成器函数来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值