css转换在for循环javascript中无法正常工作
css transition not working properly in for loop javascript
我使用for循环来更改"group ofdiv have same className"的className,以通过使用css transition影响高度的更改来更改外观。但问题是第一个div生效,而其他div则保持不变。
html:
<body onload='init()'>
<div id="menu">
<div id="chosen" class="accor hide">od</div>
<ul>
<li>To</li>
<li>Pr</li>
<li>La</li>
</ul>
<div class="accor hide">En</div>
<ul>
<li>fa</li>
<li>Co</li>
<li>Co</li>
</ul>
<div class="accor hide">Sp</div>
</div>
</body>
css:
.accor + ul{
max-height: 500px;
overflow: hidden;
transition: max-height 0.5s ease;
}
.hide + ul{
max-height: 0px;
overflow: hidden;
transition: max-height 0.5s ease;
}
javascript:
function init(){
var chosen = document.getElementById('chosen');
chosen.onclick = toggleDivs;
};
function toggleDivs(){
hideDivs = document.getElementsByClassName('accor hide');
for( var i = 0; i <= hideDivs.length; i++)
hideDivs[i].className = 'accor';
};
有了这段代码,当我单击id为"chosen"的div时,我希望所有className:"accord-hide"的div都能像jquery的slidedown一样向下展开,但只有第一个div能做到这一点。
如果我更改一点javascript代码,它将在2个div生效的情况下完成。
更改的javascript:
function toggleDivs(){
hideDivs = document.getElementsByClassName('accor hide');
hideDivs[0].className = 'accor';
hideDivs = document.getElementsByClassName('accor hide');
hideDivs[0].className = 'accor';
};
我假设for循环代码的版本,在i=0之后,所以第一个div发生转换,循环爆发,这真的很奇怪。
function init() {
var chosen = document.getElementById('chosen');
chosen.onclick = toggleDivs;
};
function toggleDivs() {
var menu = document.getElementsByClassName('accor')
for (var i = 0; i <= menu.length; i++)
menu[i].classList.toggle('hide');
};
.accor + ul {
max-height: 500px;
overflow: hidden;
transition: max-height 0.5s ease;
}
.hide + ul {
max-height: 0px;
overflow: hidden;
transition: max-height 0.5s ease;
}
<body onload='init()'>
<div id="menu">
<div id="chosen" class="accor hide">od</div>
<ul>
<li>To</li>
<li>Pr</li>
<li>La</li>
</ul>
<div class="accor hide">En</div>
<ul>
<li>fa</li>
<li>Co</li>
<li>Co</li>
</ul>
<div class="accor hide">Sp</div>
</div>
</body>
hideDivs=document.getElementsByClassName('accor-hide');
"hideDiv"这里是一个找到的元素的实时HTMLCollection参考这里。HTML DOM中的HTMLCollection是活动的。当基础文档发生更改时,它将自动更新。
因此,当您更新其中一个元素的类名时,它将从变量"hideDivs"中删除。希望这能回答你的问题。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- javascript扫雷器floodfill算法不能正常工作