mounted中使用getElementsByClassName无法获取

问题

在mounted中使用document.getElementsByClassName能打印元素集但是不能访问

代码

mounted() {
    this.handleDOM()
}
methods: {
    handleDOM() {
      let swiperEl = document.querySelector('.swiper') //获取swiper元素
      let itemEls = swiperEl.getElementsByClassName('slide')   //获取所有item个数

      console.log(itemEls); //打印元素集合
      console.log(itemEls.length);//打印元素个数
    }
  }

打印的元素集

捕获.PNG

先来说说mounted

以下出自官方文档

el 被新创建的 vm.el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个文档内>元素,当 mounted 被调用时 vm.el 也在文档内。

注意 mounted 不会承诺所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,可以>用 vm.$nextTick 替换掉 mounted:

总结

mounted是当模板被渲染完,在挂载到实例上去,然后在执行钩子,但mounted不承诺
当所有的元素都加载完成在执行
所以在元素还没有全部加载完,就执行了js代码,所有才导致获取不到的原因

解决办法

这也是个笨办法,在以后的开发中可能会产生一定的bug
使用异步操作

    setInterval(() => {
      if (this.isLoad) {
        this.handleDOM()
        this.isLoad = false
      }

    },100)

所以在实际开发中我们要注意生命周期函数运行的实质

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容