javascript - 如何获取 HTML 集合的第一个元素?
问题描述
我有以下代码在 HTML 集合中返回 1 个元素:
var message = document.getElementsByClassName('short-description shipp-info'); //Returns collection with 1 div element, which is what I want
//Returned value from message;
HTMLCollection []
0: div.short-description.shipp-info
length: 1
__proto__: HTMLCollection
但是,当我尝试获取第一个元素时,它返回未定义:
var message = document.getElementsByClassName('short-description shipp-info')[0]; //Returns undefined
//or
message[0]; //Returns undefined
这就是我一直从 HTML 集合中检索第一个元素的方式,并且它一直有效到现在。我不知道为什么它不起作用。除了未定义之外,控制台中也没有报告任何错误。
解决方案
getElementsByClassName 是一个实时的 HTML 集合。因此,它会在添加和从页面中删除元素时添加和减去元素。因此,如果您添加一个元素,它就会出现在您的集合中。下面的例子
var test = document.getElementsByClassName("foo");
console.log("before", test.length);
var d = document.createElement("div");
d.className = "foo";
document.body.appendChild(d)
console.log("after add", test.length);
d.className = "bar";
console.log("after remove class", test.length);
所以可能发生的事情是您试图在页面上之前引用该元素。当您登录时,您可能会看到浏览器延迟加载,其中显示的是当前时间点的数据,而不是添加时的数据。
推荐阅读
- java - 我应该如何在 Java 中获得结果使用流?
- python - 如何安排脚本每天在 jupyter notebook 上运行?
- r - Shiny App中反应式条形图的问题
- compiler-errors - 编译错误:collect2.exe:错误:ld 返回 1 退出状态
- java - 有没有办法让微调器延迟显示其内容,直到发生某种情况?
- python - 在初始化之前获取类 __init__ 参数
- python-3.x - 无法在 VSCode 中使用 numpy 加载 txt 文件
- ajax - 使用codeigniter 3和ajax的带有时间范围的日期范围
- python - 使用 Pandas 过滤 DatetimeIndex
- c++ - 'cin' 没有命名类型