Javascript 数组的第一个成员

Javascript 数组的第一个成员,javascript,Javascript,我用css display隐藏了一系列div:none <div id="" class="hidden_row">some code</div> <div id="" class="hidden_row">some code</div> <div id="" class="hidden_row">some code</div> 一些代码 一些代码 一些代码 我还有一个带有onclick“addRow();”函数的按钮,

我用css display隐藏了一系列div:none

<div id="" class="hidden_row">some code</div>
<div id="" class="hidden_row">some code</div>
<div id="" class="hidden_row">some code</div>
一些代码
一些代码
一些代码
我还有一个带有onclick“addRow();”函数的按钮,该函数设计为通过将css声明更改为“display:block;”在每次单击时顺序显示一个隐藏行。 javascript如下所示:

function addRow(){
    var hiddenrow = getElementsByClassName(document, "*", "hidden_row");

    for(var i=0; i< hiddenrow.length; i++){
        if(hiddenrow[i].style.display = "none"){
            hiddenrow[i].style.display = "block";
        }
    }
}
函数addRow(){
var hiddenrow=getElementsByClassName(文档,“*”,“隐藏行”);
对于(变量i=0;i

但是,该函数在执行时不会更改数组的一个成员(这是我想要的),它会找到隐藏行并显示所有隐藏行。如何调整函数以使其按预期工作?

您的if语句中有一个输入错误

if(hiddenrow[i].style.display = "none"){
应该是

if(hiddenrow[i].style.display == "none"){
编辑: 请注意,.style.display仅检查内联样式,因此您必须检查

if(hiddenrow[i].style.display != "block"){
相反,因为这更好地支持您想要的

正如Darhazer所说,如果你想一次只显示一个,你需要设置一个
中断找到你想要的后

工作区:

还有你修改过的功能

function addRow(){
    var hiddenrow = document.getElementsByClassName("hidden_row");
    for(var i=0; i< hiddenrow.length; i++){
        if(hiddenrow[i].style.display != "block"){
            hiddenrow[i].style.display = "block";
            break;
        }
    }
}​
函数addRow(){
var hiddenrow=document.getElementsByClassName(“隐藏行”);
对于(变量i=0;i

为了解决
element.style
只提取当前内联样式的问题,我发现可以通过使用
window.getComputedStyle
element.currentStyle
绕过它,两者都提取当前的计算样式,而不仅仅是内联声明

使用新代码使用JSFIDLE

首先,更正代码,因为您在if中赋值,而不是检查相等性。接下来,如果可以中断循环,那么只显示第一个元素,显示为“none”

for(var i=0; i< hiddenrow.length; i++){
        if(hiddenrow[i].style.display == "none"){
            hiddenrow[i].style.display = "block";
            break;
        }
    }
for(变量i=0;i
嗯,您是否在条件语句中错误地将“==”输入为“=”?

如果您只想将此应用于第一行,并且仅当其显示为“无”时,则不要循环。相反,只需使用数组中的第一项,如下所示:

if (hiddenrow.length > 0 && hiddenrow[i].style.display == "none"){
    hiddenrow[0].style.display = "block";
}
OTOH,如果您只想使用display=“none”将其应用于第一个项目,无论它是否是列表中的第一个项目,请执行以下操作:

for(var i=0; i< hiddenrow.length; i++){
    if(hiddenrow[i].style.display == "none"){
        hiddenrow[i].style.display = "block";
        break;
    }
}
for(变量i=0;i

break运算符阻止循环继续。

不要一次循环所有循环?实际上,当我按照您的建议更改代码时,它会停止工作。@kjarsenal-因为
var hiddenrow=getElementsByClassName(文档,“*”,“隐藏行”)
应该是
document.getElementsByClassName
。我没有任何文档支持带有3个参数的getElementsByClassName加载文档。(那太尴尬了)。代码仍然不起作用,可能是因为Kieran所指的。使用自定义GetElementsByCassName函数,因为我认为javascripts通用GetElementsByCassName对浏览器的支持有限。也许我会回到泛型实现。@Kjarsenal你没有错。。。。似乎IE8及以下版本并不支持它。