2012-12-18 57 views
1
function CheckavailOnload() 
{ 
    var elems = document.getElementsByClassName('box-collateral box-related'); 
    for(var i = 0; i < elems.length; i++){ 
    if(elems.style.visibility == 'visible') 
    { 
    var av = document.getElementsByClassName('availability in-stock'); 
    for(var i = 0; i < elems.length; i++) { 
    av[i].style.visibility = 'visible'; 
    } 
    } 
    else 
    { 
    var av = document.getElementsByClassName('availability in-stock'); 
    for(var i = 0; i < elems.length; i++) { 
    av[i].style.visibility = 'hidden'; 
    } 
    } 
} 
} 
CheckavailOnload(); 

在這裏,我想檢查div的可見性屬性「知名度」「框抵押品箱相關的」,如果它是可見的,我想toggel帶班的另一段的知名度名稱「庫存情況」遺漏的類型錯誤:無法讀取的不確定

+2

那麼就馬上吧,語法高亮顯示您缺少一個引用......「hidden」。雖然這可能只是複製粘貼錯誤... – Lix

+0

,並在爲它們分配屬性之前檢查節點的類型。某些節點根本沒有屬性=) –

+0

未捕獲的SyntaxError:意外的令牌ILLEGAL錯誤即將發生 –

回答

5

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,這可以確保您在分析之前沒有嘗試獲取元素。如果elemsav中有不同數量的元素,我將elems切換爲av,for...jfor...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...) { 
    ...... 
} 
+0

同時,我想向上移動另一個div if'box-collat​​eral box-related'visiblity is hidden –

+0

????? ...''elems''後面加上'[i]'if if elems [i] .style.visibility =='visible')'。當你用'getElementsByClassName'創建'elems'時,它不僅僅是一個元素,它是一個元素集合,即使它只有一個元素,它仍然是一個類似數組的對象。請看看https://developer.mozilla.org/en-US/docs/DOM/NodeList – Teemu

+0

我不得不提到classname,因爲我沒有這兩個div div的編號 –

1

「elems」是一組元素,但您嘗試查看它的「樣式」屬性。你需要重新排列東西,以便通過elem循環,然後檢查每個屬性。

同樣在你通過AV後來循環 - 你正在看elems.length掃描。我覺得這有點困惑。

+1

正確。 getElementsByClassName()總是返回一個元素數組,即使只有一個元素被找到。 – marekful

0

所以,正如我在my comment提到的,你似乎缺少字各地報價「隱藏」。我會假設它是一個複製粘貼錯誤。


這裏是你的代碼的精簡版,演示,以實現自己的目標的一種方式 -

function Checkavailability() 
{ 
    var elems = document.getElementsByClassName('box-collateral box-related'); 
    for (var i=0; i<elems.length; i++) { 
    if(elems[i].style.visibility == 'visible'){ 
     // do some stuff 
    } 
    else{ 
     // do some stuff 
    } 
    } 
} 

這裏的主要區別是,我們itearating過的所有元素getElementsByClassName的回報。注意函數名稱中的複數 -

get​Elements​ByClassName - Returns a set of elements which have all the given class names.

+0

未捕獲的SyntaxError:意外的令牌ILLEGAL錯誤即將到來 –

相關問題