2012-12-18 60 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错误即将到来 –

相关问题