getElementsByTagName获取video标签,打印出来了但实际获取不到?

场景:点击目录,页面插入video标签。插入后获取video开始播放事件
问题:能打印出dom信息,但是对象的长度为0且不能绑定事件。实际问题就是,dom中成功append结构,但是浏览器还没重绘,此时绑定事件失败。除了使用setTimeout,还有其他方法吗?
clipboard.png

clipboard.png

阅读 10k
5 个回答

getElementsByTagNamequerySelector的区别了解一下?

Element.getElementsByTagName() 方法返回一个动态的包含所有指定标签名的元素的HTML集合HTMLCollection。指定的元素的子树会被搜索,不包括元素自己。返回的列表是动态的,这意味着它会随着DOM树的变化自动更新自身。所以,使用相同元素和相同参数时,没有必要多次的调用Element.getElementsByTagName() .

划重点了啊。这意味着它会随着DOM树的变化自动更新自身,他是动态呢,那么结合console打出来的其实是快照,也是动态的。那么得出结论,你那个时候video还没有插入进去。你可以用querySelector验证一下

传送门-去MDN看看getElementsByTagName以及HTMLCollection

你把在插入video标签时把标签保存下来


https://jsfiddle.net/r7seguvj/
创建元素后,立刻就能绑定事件的,就算元素没有append到document中,请检查代码内部逻辑

注意是getElementsssssssssssssssssssssssssssss……ByTagName

有s的,返回来的一定是个类数组对象(HTMLCollection),引用的时候加个.item(0)变成document.getElementsByTagName('video').item(0);就行了。

贴下代码吧,是不是获取的时候还没有插入vedio

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题