JQuery текущая оптимизация кода меню - PullRequest
1 голос
/ 28 мая 2010

У меня есть код ниже, написанный на 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');
} 

Код выше имеет повторяющуюся задачу. Можем ли мы сделать код компактным?Я хочу минимизировать этот код.Как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 28 мая 2010

Поместите все переменные биты в словарь массивов:

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]); 
    } 
}
0 голосов
/ 28 мая 2010

Если удаляемая ссылка содержит тот же текст, который вы вставляете, что, как я подозреваю, имеет место, вы можете использовать unwrap вместо отслеживания этого. Это сделало бы его более устойчивым к изменениям в тексте. Я также предпочел бы использовать класс для изменения стиля шрифта для «текущего» пункта меню. Отключение решения @ Marcelo:

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