2010-05-28 91 views
1

我下面写的jQuery代码:jQuery的当前菜单代码优化

var href = window.location.href; 
if (href.search('/welcome\\/') > 0) 
{ 
    $('.menuwelcome').css('display', 'block'); 
    $('#welcome2').append('<b>Приглашаем субагентов</b>').find('a').remove(); 
    $('#welcome2').find('img').attr('src', '/static/images/arrow_black.gif'); 
} 
if (href.search('/contacts\\/') > 0) 
{ 
    $('.menuwelcome').css('display', 'block'); 
    $('#mcontacts').append('<b>Контакты</b>').find('a').remove(); 
    $('#mcontacts').find('img').attr('src', '/static/images/arrow_black_down.gif'); 
} 
if (href.search('/sindbad_history\\/') > 0) 
{ 
    $('.menuwelcome').css('display', 'block'); 
    $('.menuwelcome:first').append('<b>История</b>').find('a').remove(); 
    $('.menuwelcome:first').find('img').attr('src', '/static/images/arrow_black.gif'); 
} 
if (href.search('/insurance\\/') > 0) 
{ 
    $('.menusafe').css('display', 'block'); 
    $('#msafe').append('<b>Страхование</b>').find('a').remove(); 
    $('#msafe').find('img').attr('src', '/static/images/arrow_black_down.gif'); 
} 
if (href.search('/insurance_advices\\/') > 0) 
{ 
    $('.menusafe').css('display', 'block'); 
    $('.menusafe:first').append('<b>Полезная информация</b>').find('a').remove(); 
    $('.menusafe:first').find('img').attr('src', '/static/images/arrow_black.gif'); 
} 

上面的代码有重复性的任务,我们可以使代码紧凑? 我想尽量减少这段代码。我应该如何实现这一目标?

+0

您可以向我们展示菜单的HTML吗? – Skilldrick 2010-05-28 10:40:47

+0

最小化代码与StackOverflow无关 – 2015-08-31 11:19:28

回答

3

将所有的变量数组的字典位:

cases = { 
    '/welcome\\/' : ['.menuwelcome', '#welcome2' , 'Приглашаем субагентов', 'arrow_black.gif'  ], 
    '/contacts\\/': ['.menuwelcome', '#mcontacts', 'Контакты'    , 'arrow_black_down.gif'], 
    ... 
}; 

然后遍历所有的情况:

for (c in cases) { 
    if (href.search(c)) { 
     a = cases[c]; 
     $(a[0]).css('display', 'block'); 
     $(a[1]).append('<b>' + a[2] + '</b>').find('a').remove(); 
     $(a[1]).find('img').attr('src', '/static/images/' + a[3]); 
    } 
} 
+1

好主意。请注意,图片网址在各种情况下也不相同。一旦你找到了一场比赛,可能也想“摆脱”这个循环。 – tvanfosson 2010-05-28 10:48:53

+0

谢谢@tvanfosson。我错过了图像中的变化。修订。 – 2010-05-28 10:57:53

0

如果要删除的链接包含要插入相同的文本,我怀疑是这种情况,你可以使用unwrap而不是跟踪它。这将使它对文本中的更改更加反应。我还希望使用类来更改“当前”菜单项的字体样式。关闭@ Marcelo的解决方案:

$(a[1]).find('a').unwrap().addClass('current-menu-item');