getElementsByClassName 的索引未定义但不是整个对象
Index of getElementsByClassName is undefined but not the whole object
我正在尝试遍历具有特定 class 的元素并为其附加 ID。
var items = document.getElementsByClassName("item");
for(var i = 0; i < items.length; i++)
{
items[i].id = "item_" + i;
}
console.log(items);
如果我 运行 我收到错误 Cannot set property 'id' of undefined
然而 console.log(items)
returns 我正确的项目集合:
HTMLCollection []
0: div.item
1: div.item
length: 2
__proto__: HTMLCollection
但是当我尝试获取索引 console.log(testimonials[0])
时,它是 undefined
。
HTML:
<div class="slider">
<div class="item">
Item 1
</div>
</div>
<div class="slider">
<div class="item">
Item 2
</div>
</div>
尝试使用
items[i].setAttribute("id", "item_" + i);
有关更多详细信息,您可以访问
的文档
https://www.w3schools.com/jsref/met_element_setattribute.asp
https://www.w3schools.com/jsref/met_element_getattribute.asp
Fiddle 为:
https://jsfiddle.net/abdulrauf618/n14v58zs
问题可能是您的脚本 运行 在 DOM 完全准备好之前。
要解决此问题,您可以将代码放在 正文 的底部。
或:
尝试用 DOMContentLoaded
包装您的代码,这将确保您的代码在 DOM 完全准备好后执行。
<script>
document.addEventListener("DOMContentLoaded", function(event) {
var items = document.getElementsByClassName("item");
for(var i = 0; i < items.length; i++)
{
items[i].id = "item_" + i;
}
console.log(items);
});
</script>
<div class="slider">
<div class="item">
Item 1
</div>
</div>
<div class="slider">
<div class="item">
Item 2
</div>
</div>
检查此代码:
<html>
<head>
<script>
window.onload = function(e){
var allItem = document.getElementsByClassName("item");
for(var i = 0; i < allItem.length; i++)
{
document.getElementsByClassName("item")[i].setAttribute("id", "item_" + i);
}
};
</script>
</head>
<body>
<div class="slider">
<div class="item" id="">
Item 1
</div>
</div>
<div class="slider">
<div class="item" id="">
Item 2
</div>
</div>
</body>
</html>
希望对你有帮助。
使用vanilla js总是在DOM可以使用后做DOM相关操作。并且在 accessing/working 与任何 DOM 元素之前检查它是否可以为 null(不等于 null)。通过这些实践,您不会看到 DOM 元素出现任何错误,因为这是使用 DOM 元素进行操作的安全方式。在常规循环中总是缓存 array.length
。避免使用匿名函数,它不是面向未来的,也不是调试友好的方式。还要将所有 js 写在单独的 js 文件中。
HTML
<div class="slider">
<div class="item">
Item 1
</div>
</div>
<div class="slider">
<div class="item">
Item 2
</div>
</div>
JS
document.addEventListener("DOMContentLoaded", onDomReadyHandler);
function onDomReadyHandler(event) {
var items = document.getElementsByClassName('item');
var itemsLen = items.length;
for(var i = 0; i < itemsLen; i++) {
items[i].id = "item_" + i;
}
console.log(items);
}
我正在尝试遍历具有特定 class 的元素并为其附加 ID。
var items = document.getElementsByClassName("item");
for(var i = 0; i < items.length; i++)
{
items[i].id = "item_" + i;
}
console.log(items);
如果我 运行 我收到错误 Cannot set property 'id' of undefined
然而 console.log(items)
returns 我正确的项目集合:
HTMLCollection []
0: div.item
1: div.item
length: 2
__proto__: HTMLCollection
但是当我尝试获取索引 console.log(testimonials[0])
时,它是 undefined
。
HTML:
<div class="slider">
<div class="item">
Item 1
</div>
</div>
<div class="slider">
<div class="item">
Item 2
</div>
</div>
尝试使用
items[i].setAttribute("id", "item_" + i);
有关更多详细信息,您可以访问
的文档https://www.w3schools.com/jsref/met_element_setattribute.asp
https://www.w3schools.com/jsref/met_element_getattribute.asp
Fiddle 为:
https://jsfiddle.net/abdulrauf618/n14v58zs
问题可能是您的脚本 运行 在 DOM 完全准备好之前。
要解决此问题,您可以将代码放在 正文 的底部。
或:
尝试用 DOMContentLoaded
包装您的代码,这将确保您的代码在 DOM 完全准备好后执行。
<script>
document.addEventListener("DOMContentLoaded", function(event) {
var items = document.getElementsByClassName("item");
for(var i = 0; i < items.length; i++)
{
items[i].id = "item_" + i;
}
console.log(items);
});
</script>
<div class="slider">
<div class="item">
Item 1
</div>
</div>
<div class="slider">
<div class="item">
Item 2
</div>
</div>
检查此代码:
<html>
<head>
<script>
window.onload = function(e){
var allItem = document.getElementsByClassName("item");
for(var i = 0; i < allItem.length; i++)
{
document.getElementsByClassName("item")[i].setAttribute("id", "item_" + i);
}
};
</script>
</head>
<body>
<div class="slider">
<div class="item" id="">
Item 1
</div>
</div>
<div class="slider">
<div class="item" id="">
Item 2
</div>
</div>
</body>
</html>
希望对你有帮助。
使用vanilla js总是在DOM可以使用后做DOM相关操作。并且在 accessing/working 与任何 DOM 元素之前检查它是否可以为 null(不等于 null)。通过这些实践,您不会看到 DOM 元素出现任何错误,因为这是使用 DOM 元素进行操作的安全方式。在常规循环中总是缓存 array.length
。避免使用匿名函数,它不是面向未来的,也不是调试友好的方式。还要将所有 js 写在单独的 js 文件中。
HTML
<div class="slider">
<div class="item">
Item 1
</div>
</div>
<div class="slider">
<div class="item">
Item 2
</div>
</div>
JS
document.addEventListener("DOMContentLoaded", onDomReadyHandler);
function onDomReadyHandler(event) {
var items = document.getElementsByClassName('item');
var itemsLen = items.length;
for(var i = 0; i < itemsLen; i++) {
items[i].id = "item_" + i;
}
console.log(items);
}