简体   繁体   English

使用jQuery更改CSS类

[英]Change CSS class using jQuery

I am trying to show which menu item is the active one when it's clicked on by reassigning a css class to the list item using jQuery. 我试图通过使用jQuery将CSS类重新分配给列表项来显示单击时哪个菜单项是活动菜单项。 I've looked at some examples online and tried some different ones, but I can't seem to get mine to work at all. 我在网上查看了一些示例,并尝试了一些不同的示例,但是我似乎根本无法使我的工作正常。 Can someone look at my code from my last try and tell me what I am doing wrong? 有人可以看看我上次尝试的代码,然后告诉我我做错了什么吗? Thanks for your help. 谢谢你的帮助。

Script in HEAD tag: HEAD标记中的脚本:

<script type="text/javascript" src="script/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $("#topnavi ul li a").click(function () {
            if ($(this).parent("li").hasClass(".select"))
                $("#topnavi ul li a").parent("li").removeClass(".select").addClass(".norm");
            $(this).parent("li").removeClass(".norm").addClass(".select");
        });
    });
</script>

HTML: HTML:

        <div id="topnavi">
            <ul>
                <li class="select"><a href="Default.aspx">HOME</a></li>
                <li class="norm"><a href="AboutUs.aspx">ABOUT US</a></li>
                <li class="norm"><a href="Services.aspx">SERVICES</a></li>
                <li class="norm"><a href="Packages.aspx">PACKAGES</a></li>
                <li class="norm"><a href="Comments.aspx">COMMENTS</a></li>
                <li class="norm"><a href="ContactUs.aspx">CONTACT US</a></li>
                <asp:LoginView ID="lvBackgroundSound1" runat="server">
                    <RoleGroups>
                        <asp:RoleGroup Roles="administrator"><ContentTemplate><li class="norm"><a href="administration/ManageComments.aspx">ADMIN</a></li></ContentTemplate></asp:RoleGroup>
                    </RoleGroups>
                </asp:LoginView>
            </ul>
        </div>

When a new anchor in a list item is clicked on, I would like to assign the "norm" class to the list item surrounding the previously selected anchor and assign the "select" class to the list item surrounding the newly selected anchor. 当单击列表项中的新锚点时,我想将“ norm”类分配给先前选择的锚点周围的列表项,并将“ select”类分配给新选择的锚点周围的清单项。

You don't need the dot before the class name when using hasClass , addClass and removeClass . 使用时,您不需要在类名前点hasClassaddClassremoveClass
Change 更改

if ($(this).parent("li").hasClass(".select"))
                $("#topnavi ul li a").parent("li").removeClass(".select").addClass(".norm");
            $(this).parent("li").removeClass(".norm").addClass(".select");

to

if ($(this).parent("li").hasClass("select"))
                $("#topnavi ul li a").parent("li").removeClass("select").addClass("norm");
            $(this).parent("li").removeClass("norm").addClass("select");

In conjunction with Tobias' answer, you might want to add some opening brackets to this part of the code 结合Tobias的答案,您可能想在代码的这一部分添加一些开括号。

if ($(this).parent("li").hasClass(".select")) {
    $("#topnavi ul li a").parent("li").removeClass(".select").addClass(".norm");
    $(this).parent("li").removeClass(".norm").addClass(".select");
}

Or something along those lines. 或类似的规定。 You could also use .toggleClass() instead of removing and adding the classes. 您也可以使用.toggleClass()来代替删除和添加类。

Adding to what Tobias already mentioned, change 添加到Tobias已经提到的内容中,进行更改

if ($(this).parent("li").hasClass(".select"))
    $("#topnavi ul li a").parent("li").removeClass(".select").addClass(".norm");
$(this).parent("li").removeClass(".norm").addClass(".select");

To

$("#topnavi ul li").removeClass("select").addClass("norm");
$(this).parent("li").removeClass("norm").addClass("select");

This will make sure select class is assigned only to the selected li and rest other li elements will have norm class. 这将确保将select类仅分配给选定的li而其余的其他li元素将具有norm类。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM