2010-05-28 6 views
1

je code écrit ci-dessous dans jQuery:optimisation jQuery code menu actuel

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

Le code ci-dessus ont des tâches répétitives, pouvons-nous faire le pacte de code? Je souhaite minimiser ce code. Comment devrais-je y parvenir?

+0

Pouvez-vous nous montrer le code HTML du menu? – Skilldrick

+0

Réduire le code n'est pas pertinent sur StackOverflow –

Répondre

3

place tous les bits variables dans un dictionnaire de tableaux:

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

boucle alors sur les cas:

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

Excellente idée. Notez que l'URL de l'image est également différente dans les différents cas. Vous voulez probablement sortir de la boucle une fois que vous avez trouvé un match. – tvanfosson

+0

Merci, @tvanfosson. J'ai raté la variation dans les images. Modifié. –

0

Si le lien que vous supprimez contient le même texte que vous insérez , ce que je soupçonne est le cas, vous pouvez utiliser unwrap au lieu de garder une trace de celui-ci. Cela le rendrait plus résistant aux changements dans le texte. Je préférerais également utiliser une classe pour changer le style de police pour l'élément de menu "en cours". Suppression de la solution de @ Marcelo:

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