我可以在不使用'这个'的情况下重写Javascript吗?

时间:2014-08-15 14:10:51

标签: javascript jquery wordpress

我对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/

我有全局应用的代码(我在同一个地方有其他代码可以在点击后切换导航(在移动设备上)并且工作正常)

我的菜单位于顶部(没有任何下拉列表,只有链接)。我无法提供链接,因为它目前不是外部链接。我的代码是否应该改变这个?

有些人评论说过"这是什么''"我觉得我完全错过了什么。

4 个答案:

答案 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');
});

http://jsfiddle.net/re3hjzyf/

答案 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');
}