我对JS很陌生,而且我无法解决这个问题。
这是我的代码
jQuery('ul.menu li').each(function() {
jQuery(this).removeClass('current-menu-item');
jQuery(this).removeClass('current_page_item');
});
jQuery(this).parents('li').addClass('current_page_item');
jQuery(this).parents('li').addClass('current-menu-item');
现在 应该做的是从导航菜单上的一个链接中删除突出显示,并突出显示已单击的链接(我有一个AJAX实现)。
由于某种原因,它没有做任何事情。我有一种感觉,这是由于这个'有没有另一种方法来构造这个代码,所以我可以解决代码是错误的,我不相信它,或者因为'这个'?
编辑:
道歉,似乎我没有给出足够的信息。我使用二十四个wordpress主题,但我用AJAX服务这些页面。http://twentyfourteendemo.wordpress.com/
我有全局应用的代码(我在同一个地方有其他代码可以在点击后切换导航(在移动设备上)并且工作正常)
我的菜单位于顶部(没有任何下拉列表,只有链接)。我无法提供链接,因为它目前不是外部链接。我的代码是否应该改变这个?
有些人评论说过"这是什么''"我觉得我完全错过了什么。
答案 0 :(得分:5)
您不需要循环每个项目来逐个删除类,这更容易:
jQuery('ul.menu li').removeClass('current-menu-item').removeClass('current_page_item');
或(它是一样的):
jQuery('ul.menu li').removeClass('current-menu-item current_page_item');
但我不明白这是什么'这个' :
jQuery(this).parents('li').addClass('current_page_item');
jQuery(this).parents('li').addClass('current-menu-item');
你的意思是:
jQuery('ul.menu li').addClass('current_page_item current-menu-item');
或者,如果您正在使用事件监听器(例如点击,如@Daniel Sanchez对评论的感觉),您只需要这样做:
jQuery('ul.menu li').click(function(){
// Remove class on each item
jQuery('ul.menu li').removeClass('current-menu-item current_page_item');
// Add class for this one
jQuery(this).addClass('current_page_item current-menu-item');
})
答案 1 :(得分:2)
目前还不完全清楚你要做的是什么,但代码可以有所简化:
jQuery("ul.menu li a").click(function(){
jQuery('ul.menu li').removeClass('current-menu-item current_page_item');
jQuery(this).parent('li').addClass('current_page_item current-menu-item');
});
答案 2 :(得分:0)
是的,将this
替换为'ul.menu li'
。
所以代码就像这样
jQuery('ul.menu li').each(function() {
jQuery('ul.menu li').removeClass('current-menu-item')
.removeClass('current_page_item');
});
// not sure what the following code is referencing too
// it is outside the bounds of .each() function.
jQuery(this).parents('li').addClass('current_page_item');
jQuery(this).parents('li').addClass('current-menu-item');
this
使用JavaScript和许多面向对象编程语言时,this
关键字用于指代程序员正在使用的当前上下文。您当前正在引用ul.menu li
元素,因此使用this
可以调用.each()
函数中选择的元素。
您可以使用each()
功能中使用的元素选择器替换它。
答案 3 :(得分:0)
jQuery('.current-menu-item').removeClass('current-menu-item');
jQuery('.current_page_item').removeClass('current_page_item');
这里我假设只有一个项目会有这些类,因为它表示当前选择了哪个菜单项。选择它的最佳方法是搜索要删除的类。 (如果这些类总是在一起,你也可以在同一行上删除它们,尽管那时你可能想要考虑你是否真的需要它们。
jQuery('ul.menu li').on("click", function() {
jQuery(this).addClass('current_page_item').addClass('current-menu-item');
}
你只能使用"这个"作为选择器的参数,当"这个"有一个值(即:在每个循环内部或内部。 在这种情况下,我使用on()函数来应用函数,该函数将类添加到任何被单击的列表项中。
合并这两个你最终会得到:
jQuery('ul.menu li').on("click", function() {
jQuery('.current-menu-item').removeClass('current-menu-item');
jQuery('.current_page_item').removeClass('current_page_item');
jQuery(this).addClass('current_page_item').addClass('current-menu-item');
}