Javascript 使用getElementsByClassName时无法读取未定义的属性
我有一个很奇怪的问题,我似乎无法解决。我已经编写了一段代码,我想在某个元素具有此特定类名时使用它,因此我完成了以下操作:Javascript 使用getElementsByClassName时无法读取未定义的属性,javascript,html,Javascript,Html,我有一个很奇怪的问题,我似乎无法解决。我已经编写了一段代码,我想在某个元素具有此特定类名时使用它,因此我完成了以下操作: function slide() { var box = document.getElementsByClassName('box'); if(box.style.maxHeight !== "100px") { box.style.maxHeight = "100px"; box.style.opacity = "1";
function slide() {
var box = document.getElementsByClassName('box');
if(box.style.maxHeight !== "100px") {
box.style.maxHeight = "100px";
box.style.opacity = "1";
} else {
box.style.maxHeight = "0";
box.style.opacity = "0";
}
return false;
}
以及HTML:
<h1 onclick="slide();"> Text </h1>
<div class="box">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.
</p>
</div>
我想我错过了一些东西,但我不知道是什么有趣的是:当我使用getElementById
时,它是有效的!但是我想改为使用类名,这是行不通的
我得到的错误是:
未捕获的TypeError:无法读取未定义的属性“maxHeight”
getElementsByClassName
返回一个数组。它的项具有style
属性,而不是数组本身。按类名获取元素返回HTML集合。您需要在每个元素上分配它:
var box = document.getElementsByClassName('box')[0];
var boxes = document.getElementsByClassName('box');
for(box of boxes){
//work with elem
if(box.style.maxHeight !== "100px") {
box.style.maxHeight = "100px";
box.style.opacity = "1";
} else {
box.style.maxHeight = "0";
box.style.opacity = "0";
}
}
var-box=document.getElementsByClassName('box')[0]哦,天哪!哇,这么简单?请你把它写下来作为一个答案,并向我解释它的确切用途?它是有效的,但我想知道为什么需要这样做?byID返回1,byClass返回多。从提供的答案中选择一个;)谢谢丹达维斯。我想把它给你,但是谢谢!你能用我的代码片段举个例子吗?不要理解你的意思编辑,现在包含工作代码…太棒了,非常感谢!我第一次在HTMLCollection上看到一个
for…of。是他们的[Symbol.iterator]标准吗?与NodeList不同,规范没有说它们是可移植的。@Oriol不知道……请不要忘记解释/注释您的代码,并提供相关文档[来自审阅]
var boxes = document.getElementsByClassName('box');
for(box of boxes){
//work with elem
if(box.style.maxHeight !== "100px") {
box.style.maxHeight = "100px";
box.style.opacity = "1";
} else {
box.style.maxHeight = "0";
box.style.opacity = "0";
}
}