javascript - 为什么我会收到数组中元素的“未捕获的类型错误:无法读取 null 的属性 'style'”?
问题描述
当我将鼠标光标悬停在这些元素上时,我正在使用 JavaScript 来执行某些元素的初始设置以及对这些元素的操作。当按类名获取元素并遍历它们以更改样式时,我收到“未捕获的类型错误:无法读取 null 的属性'样式'”消息。
- 将 JavaScript 代码定位在正文中和正文之外(当前位于正文中 HTML 文档的末尾)。
- 尝试为元素分配 ID 并改用 getElementById。
var cards = document.getElementsByClassName('card');
var initialOffset = 100;
(function initialLoad() {
for (var i = 0; i <= cards.length; i++) {
cards[i].style.zIndex = i;
if (i > 0) {
cards[i].style.left = cards[i - 1].offsetLeft + initialOffset + 'px';
}
}
})();
.card-container {
position: absolute;
margin: 20px auto;
}
.card {
position: absolute;
background: rgb(236, 236, 236);
border: 1px solid black;
height: 250px;
width: 200px;
}
<header>
<div class="cards-container">
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
</div>
</header>
奇怪的是,即使抛出错误,设置实际上也会起作用。不过,该错误似乎稍后会导致问题,这就是我现在试图消除它的原因。
解决方案
正如@str 所指出的,使用<
而不是<=
:
var cards = document.getElementsByClassName('card');
var initialOffset = 100;
(function initialLoad() {
for (var i = 0; i < cards.length; i++) {
cards[i].style.zIndex = i;
if (i > 0) {
cards[i].style.left = cards[i - 1].offsetLeft + initialOffset + 'px';
}
}
})();
.card-container {
position: absolute;
margin: 20px auto;
}
.card {
position: absolute;
background: rgb(236, 236, 236);
border: 1px solid black;
height: 250px;
width: 200px;
}
<header>
<div class="cards-container">
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
</div>
</header>
或者按照@Barmar 的建议,您可以使用forEach
:
var cards = [...document.querySelectorAll('.card')];
var initialOffset = 100;
(function initialLoad() {
cards.forEach((card, i) => {
card.style.zIndex = i;
if (i > 0) {
card.style.left = cards[i - 1].offsetLeft + initialOffset + 'px';
}
});
})();
.card-container {
position: absolute;
margin: 20px auto;
}
.card {
position: absolute;
background: rgb(236, 236, 236);
border: 1px solid black;
height: 250px;
width: 200px;
}
<header>
<div class="cards-container">
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
</div>
</header>
推荐阅读
- r - 通过R中的数据表迭代过滤
- javascript - d3 年滑块显示步骤之间的区域
- php - imagecreatefromjpeg() 升级到 PHP 7.4 后停止工作,而 imagecreatefrompng() 和 imagecreatefromgif() 继续正常工作
- tensorflow - 接收图像数据集的相同(非随机)增强
- c# - iOS使用firebase没有收到远程通知
- angular - 切换地图后在NGRX特效点击功能中获取动作道具
- mac-app-store - 应用因“元数据中缺少条款和条件”而被拒绝
- symfony - 从ManyToMany获取最后一个值
- sql - 使用外部表的问题
- python - 有没有办法降低 cv2.VideoWriter 实时摄像机录制视频的比特率?