getElementsByClassName()
总是给你一个nodeList对象,即使它只有一个成员。 NodeList对象没有style
属性,因此您需要在第一个if
中迭代elems
以检查可见性,就像您在代码中所做的一样。
如果你确定只有一个成员,你可以使用elems[0].style.visibility
来检查它的可见性。
如果要检查特定元素的可见性,可以给它一个id
并使用document.getElementById()
来获取该元素。
编辑
感谢小提琴,现在我们可以有一些成果。
因此,也许你不需要那个id
,如果没有明确指定,试图获得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;
该代码将检查分配到班box-collateral box-related
所有元素。在jsFiddle的工作演示。
请注意,还可以使用window.onload
,这可以确保您在分析之前没有尝试获取元素。如果elems
和av
中有不同数量的元素,我将elems
切换为av
,for...j
和for...k
-loops,假定工作正常。
如果找到的第一个具有主要类的元素是要检查的元素,则可以简单地在所有elems[i]
表达式中将i
替换为0
。
如果你只想检查一个特定的元素,你可以给它一个id
,并通过getElementById()
得到它的引用。在HTML:
<div id="checkThisOnly" class="box-collateral box-related">
然后在脚本:
var elem = document.getElementById('checkThisOnly');
if (getComputedStyle(elem).visibility...) {
......
}
那么就马上吧,语法高亮显示您缺少一个引用......“hidden”。虽然这可能只是复制粘贴错误... – Lix
,并在为它们分配属性之前检查节点的类型。某些节点根本没有属性=) –
未捕获的SyntaxError:意外的令牌ILLEGAL错误即将发生 –