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
到av
in for...j
-and - for...k
loops,应该可以正常工作。elems
av
如果第一个找到的具有维护类的元素是要检查的元素,则可以在所有表达式中简单地替换i
为。0
elems[i]
如果你只想检查一个特定的元素,你可以给它一个id
,并用它来获取对它的引用getElementById()
。在 HTML 中:
<div id="checkThisOnly" class="box-collateral box-related">
然后在脚本中:
var elem = document.getElementById('checkThisOnly');
if (getComputedStyle(elem).visibility...) {
......
}