jQuery当前菜单代码优化

发布于 2024-09-03 04:01:45 字数 1442 浏览 4 评论 0原文

我用 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');
} 

上面的代码有重复的任务,我们可以使代码紧凑吗? 我想最小化这段代码。我应该如何实现这个目标?

I have below code written in 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');
} 

The code above have repetitive task, Can we make the code compact?
I want to minimize this code. How should I achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

耶耶耶 2024-09-10 04:01:45

将所有变量位放入数组字典中:

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]); 
    } 
}

Place all the variable bits in a dictionary of arrays:

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

Then loop over the cases:

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]); 
    } 
}
唔猫 2024-09-10 04:01:45

如果您要删除的链接包含与您要插入的文本相同的文本(我怀疑是这种情况),您可以使用 解开而不是跟踪它。这将使其更能适应文本的变化。我还更喜欢使用类来更改“当前”菜单项的字体样式。关闭@Marcelo 的解决方案:

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

If the link that you are removing contains the same text that you are inserting, which I suspect is the case, you could use unwrap instead of keeping track of it. This would make it more resilent to changes in the text. I'd also prefer using a class to change the font style for the "current" menu item. Keying off @Marcelo's solution:

   $(a[1]).find('a').unwrap().addClass('current-menu-item');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文