单击导航addClass/removeClass
Nav addClass/removeClass on click
我有一个菜单,它链接到同一页面上的内容,并通过jQuery淡入淡出div,工作非常完美。
导航中的第一个链接附加了一个类(current_page_item(,我希望在单击导航中的任何其他链接时,删除该类并将其添加到单击的链接中。
到目前为止,我已经尝试过这样的东西:
$(function() {
$("#nav-links a").click(function(){
$("#nav-links ul li").removeClass("current_page_item").find("li:last a").addClass("current_page_item");
});
});
这不起作用。
我是javascript的新手,如果有任何帮助,我将不胜感激。
谢谢!
编辑:
这是导航的HTML:
<div id="nav-wrap">
<ul class="group" id="nav-links">
<li class="current_page_item"><a href="#recent" class="linkclass recent">RECENT</a></li>
<li><a href="#work" class="linkclass work">WORK</a></li>
<li><a href="#who" class="linkclass who">WHO</a></li>
<li><a href="#services" class="linkclass services">SERVICES</a></li>
<li><a href="#contact" class="linkclass contact">CONTACT</a></li>
</ul>
</div>
编辑2:
使用下面的答案似乎仍然没有达到我想要的目的。也许是因为我使用的jQuery插件(魔术线(。链接
所以基本上我希望"线"停留在点击的下方。如果我在正确的位置加载一个带有"current_page_item"的新页面,这会起作用,但由于我正在淡出DIV,我无法做到这一点。
该行返回到具有"current_page_item"类的li项。也许可以修改此代码以将类添加到单击的元素中?
这是代码。
$(function() {
var $el, leftPos, newWidth,
$mainNav = $("#nav-links");
$mainNav.append("<li id='magic-line'></li>");
var $magicLine = $("#magic-line");
$magicLine
.width($(".current_page_item").width())
.css("left", $(".current_page_item a").position().left)
.data("origLeft", $magicLine.position().left)
.data("origWidth", $magicLine.width());
$("#nav-links li a").hover(function() {
$el = $(this);
leftPos = $el.position().left;
newWidth = $el.parent().width();
$magicLine.stop().animate({
left: leftPos,
width: newWidth
});
}, function() {
$magicLine.stop().animate({
left: $magicLine.data("origLeft"),
width: $magicLine.data("origWidth")
});
});
});
您可以使用$(this)
访问单击的元素,并使用parent()
访问其父li
元素以添加current_page_item
类。下面是最后的代码,您可以在这里找到一个工作示例。
$(function() {
var $el, leftPos, newWidth,
$mainNav = $("#nav-links");
$mainNav.append("<li id='magic-line'></li>");
var $magicLine = $("#magic-line");
$magicLine
.width($(".current_page_item").width())
.css("left", $(".current_page_item a").position().left)
.data("origLeft", $magicLine.position().left)
.data("origWidth", $magicLine.width());
$("#nav-links li:not('#magic-line') a").hover(function() {
$el = $(this).parent();
leftPos = $el.position().left;
newWidth = $el.width();
$magicLine.stop().animate({
left: leftPos,
width: newWidth
});
},function() {
$magicLine.stop().animate({
left: $magicLine.data("origLeft"),
width: $magicLine.data("origWidth")
});
}).click(function() {
$mainNav.find('li').removeClass('current_page_item');
$(this).parent().addClass('current_page_item');
$magicLine
.data("origLeft", $magicLine.position().left)
.data("origWidth", $magicLine.width());
});
});
$(function() {
$("#nav-links a").click(function(){
var B = $(this);
$("#nav-links ul li").removeClass("current_page_item");
B.addClass("current_page_item");
});
});
试试这个
nav-links
是ul
,因此$("#nav-links ul li")
表示所有li
在ul
中,女巫是nav-links
的后代,显然没有。你必须使用$("#nav-links li")
- 正如其他人提到的那样,
.find
搜索所有的后代,而这不是你想要的。在.find
之前使用.closest("ul")
希望能有所帮助。
$(function() {
$("#nav-links a").click(function(){
$("#nav-links li").removeClass("current_page_item").closest("ul").find("li:last a").addClass("current_page_item");
});
});
.find((只查找已故元素。你正在做。在一个li上查找,它是你正在搜索的元素的兄弟。
相关文章:
- 什么是“;右“;使用addClass/delay/removeClass的方法
- jQuery addClass/removeClass转换不是平滑的,而是断断续续的
- removeClass(如果单击addClass)
- 有人可以帮助我调试带有addClass和removeClass函数的“每个会话一次”cookie吗?
- jQuery addClass/removeClass在调试期间工作,但不能正常执行
- 无法获取removeClass或addClass的angularjs动画类断点
- 在IE9和jQuery上选择addClass和removeClass
- Jquery AddClass and RemoveClass
- 如何使用addclass和removeclass方法更改textarea(NicEdit中使用的textarea)的cs
- 我的addClass和removeClass代码似乎不适用于Bootstrap Glyphicons
- addClass 和 removeClass 无法正常工作
- addClass/removeClass doesn't apply
- Animating addClass & removeClass with jQueryUI or CSS
- 为 addClass/removeClass 提供持续时间
- 使用 jquery 将动画效果添加到 addClass/removeClass
- JQuery - ToggleClass/AddClass/RemoveClass
- addClass/removeClass 基于所选项目数据属性
- jQuery RemoveClass/addClass analog Javascript
- jQuery延迟切换Class/removeClass/addClass
- 我的javascript removeClass + addClass时,点击只在Chrome上工作,而不是Firefo