getElementsByClassName()总是给你一个 nodeList 对象,即使它只有一个成员。NodeList 对象没有style属性,因此您需要首先进行迭代elems以if检查可见性,就像您在代码中所做的那样。
如果您确定只有一个成员,您可以使用 来检查它的可见性elems[0].style.visibility。
如果要检查特定元素的可见性,可以给它一个id并使用document.getElementById().
编辑
感谢您的提琴,现在我们可以得到一些结果。
所以,也许你不需要那个id,实际问题发生在尝试 get 时style,如果它没有明确分配的话。要解决这个问题,您需要使用getComputedStyle():
function CheckavailOnload() {
var elems = document.getElementsByClassName('box-collateral box-related');
for (var i = 0; i < elems.length; i++) {
if (getComputedStyle(elems[i]).visibility == 'visible' || getComputedStyle(elems[i]).display == 'block') {
alert("hello");
var av = document.getElementsByClassName('availability in-stock');
for (var j = 0; j < av.length; j++) {
av[j].style.visibility = 'visible';
}
}
else if (getComputedStyle(elems[i]).visibility == 'hidden' || getComputedStyle(elems[i]).display == 'none') {
var av = document.getElementsByClassName('availability in-stock');
for (var k = 0; k < av.length; k++) {
av[k].style.visibility = 'hidden';
}
}
}
}
window.onload = CheckavailOnload;
此代码将检查分配给 classes 的所有元素box-collateral box-related。jsFiddle的工作演示。
还要注意使用 of window.onload,它可以确保您不会在元素被解析之前尝试获取它们。如果 and 中有不同数量的元素,我切换elems到avin for...j-and - for...kloops,应该可以正常工作。elemsav
如果第一个找到的具有维护类的元素是要检查的元素,则可以在所有表达式中简单地替换i为。0elems[i]
如果你只想检查一个特定的元素,你可以给它一个id,并用它来获取对它的引用getElementById()。在 HTML 中:
<div id="checkThisOnly" class="box-collateral box-related">
然后在脚本中:
var elem = document.getElementById('checkThisOnly');
if (getComputedStyle(elem).visibility...) {
......
}