JQuery中的addClass

时间:2013-10-13 01:56:53

标签: javascript jquery addclass

我是JQuery的新手,我对addClass()有疑问。我花了一些时间试图让这个工作,但似乎我做错了什么。我用HTML和bootstrap创建了一个顶级菜单。我假设访问者将首先登陆我的index.php,所以我为index.php创建了class =“active”。然后,如果他们点击顶部菜单上的任何其他链接(例如关于我们),则class =“active”将添加到index.php的“li”选项卡中并删除class =“active”。 / p>

以下是我的HTML代码:

<div class="nav-collapse collapse">  
    <ul class="nav pull-right">
        <li id="home" class="active"><a href="index.php"> Home</a></li>
        <li id="about"><a href="about_us.php"> About Us</a></li>
        <li id="browse"><a href="browse.php"> Browse</a></li>
        <li id="contact"><a href="contact.php"> Contact</a></li>
    </ul> 
</div>

以下是我使用的JQuery代码,并尝试完成此操作。

$(function (){              
   var sidebar = $('.nav');
sidebar.delegate("li", "click", function(){ 
    if($(this).hasClass('active')){ 
    //If click on the tab that is currently active, it will do nothing.  
    }else{      
            sidebar.find('.active').addClass('inactive'); 
            sidebar.find('.active').removeClass('active');   
            $(this).removeClass('inactive');            
            $(this).addClass('active'); 
         }
     });
});

我在本地服务器上测试了它。点击它后,我可以看到顶部菜单中的标签变为灰色,但它没有停留。所以我确信我做错了什么,但不确定在哪里。我是JQuery的新手,所以我希望我可以向你们学习。谢谢!

3 个答案:

答案 0 :(得分:2)

当点击链接时,它会将浏览器带到一个全新的页面,从而启动一个全新的javascript环境,你对当前页面所做的一切都不会转移到新加载的页面。

因此,可以在当前页面上更改活动类,但是然后加载整个新页面,其从第一页继承任何内容(例如,它从头开始)。加载新页面后,您的第一页代码将不再播放。

您需要将活动类编码到每个单独的页面中(因为每个页面都知道它是什么页面),或者有一个通用的JS集合,当页面根据URL加载时设置活动类,因此它是初始化的在页面加载时正确。


此外,您可能不需要非活动类。默认的CSS状态可以表示非活动外观,活动类可以应用CSS覆盖来显示活动状态。

答案 1 :(得分:0)

这不起作用,因为当有人点击其他链接时,会将其重定向到其他页面。但是,您的标题并不真正知道点击了哪个链接,也不知道它在哪个页面上。你需要让你的标题知道你是哪个页面。这有意义吗?

答案 2 :(得分:0)

其他答案是正确的,当您点击标签时,您正在打开新页面,从而失去了您的javascript环境。

如果您想拥有单页应用,可以使用preventDefault阻止浏览器关注该链接。

sidebar.delegate("li", "click", function(e){
    e.preventDefault();
    if($(this).hasClass('active')){ 
        //If click on the tab that is currently active, it will do nothing.
    }else{
        sidebar.find('.active').addClass('inactive'); 
        sidebar.find('.active').removeClass('active');   
        $(this).removeClass('inactive');            
        $(this).addClass('active');
     }
 });