2016-04-03 201 views
0

我有这样的jQuery代码被触发移动导航,这是两个div(左和标识的右侧,但标志是隐藏的):循环通过getElementsByClassName方法

$(document).ready(function() { 
    $('.menu').on('click', function(e){ 
    $('.main-nav').toggleClass('active'); 
    e.preventDefault(); 
    }); 
}); 

我尝试重写这vannila JS通过这样的:

document.addEventListener('DOMContentLoaded', function() { 
    var toggleNav = document.getElementsByClassName('main-nav'); 

    function myFunction() { 
    for (var i=0; i<toggleNav.length; i++) { 
     toggleNav[i].classList.toggle('active'); 
     console.log('myFunction() fired...'); 
     return false; 
    } 
    }; 

    var x = document.getElementsByClassName('menu')[0]; 
    x.addEventListener('click', myFunction); 
}); 

但这仅仅只在切换循环中的第一资产净值,这是left-nav,就像如果我在过去使用var toggleNav = document.getElementsByClassName('main-nav')[0];。什么地方出了错?

HTML代码:

<div class="toggle-mobile-nav"> 
    <a href="#" class="menu">Menu <span>≡</span></a> 
</div> 

<div class="navigation"> 

    <nav class="main-nav left-nav"> 
    ... 
    </nav> 

    <div class="logo logo-nav"> 
    <a href="/"><img class="logo-svg" src="..." alt="" /></a> 
    </div> 

    <nav class="main-nav right-nav"> 
    ... 
    </nav> 

</div> 

回答

3

您正在返回falsefor循环,那会像不大不小的break的,

function myFunction() { 
    for (var i=0; i<toggleNav.length; i++) { 
     toggleNav[i].classList.toggle('active'); 
     console.log('myFunction() fired...'); 
    } 
    return false; 
}; 

你必须在你的函数返回false。循环执行之后也是如此。

+0

还有其他各种问题,随时从我现在删除的答案复制任何相关的东西。 –

+0

'var x = document.getElementsByClassName('menu')[0];'有意返回第一个元素。稍后,该按钮将具有更多独特的类名,这在我的代码中再也不会出现。我认为这是比循环更快的请求? – Lanti

+0

@TJ OP可以从我们的2个答案中获益。我认为我在这里解释的是OP的主要问题。好的,我会解释你在这里回答你说的话。 –