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錯誤即將發生 –