2016-02-08 3 views
1

у меня есть этот HTML для измерителя прогресса:JQuery: Добавить класс в зависимости от URL наилучшим образом

<div class="col-md-3" style="margin-left: -20px;"> 
    <div class="progress-pos active" id="progess-1"> 
    <div class="progress-pos-inner"> 
     Login 
    </div> 
    </div> 
</div> 
    <div class="col-md-3 progress-pos-container"> 
    <div class="progress-pos" id="progess-2"> 
    <div class="progress-pos-inner"> 
     Scan Items 
    </div> 
    </div> 
</div> 
    <div class="col-md-3 progress-pos-container"> 
    <div class="progress-pos" id="progess-3"> 
    <div class="progress-pos-inner"> 
     Confirm Address 
    </div> 
    </div> 
</div> 
    <div class="col-md-3 progress-pos-container"> 
    <div class="progress-pos" id="progess-4"> 
    <div class="progress-pos-inner"> 
     Finished 
    </div> 
    </div> 
</div> 

Я использую следующий JQuery, чтобы добавить/удалить классы в зависимости от URL.

$(document).ready(function() { 
    if(location.search == "?route=account/login&SSL"){ 
    $("#progess-1").addClass("active"); 
    } 
    if(location.search == "?route=checkout/cart"){ 
    $("#progess-2").addClass("active"); 
    $("#progess-1").addClass("inactive"); 
    } 
    if(location.search == "?route=checkout/checkout"){ 
    $("#progess-3").addClass("active"); 
    $("#progess-1").addClass("inactive"); 
    $("#progess-2").addClass("inactive"); 
    } 
    if(location.search == "?route=checkout/success"){ 
    $("#progess-4").addClass("active"); 
    $("#progess-1").addClass("inactive"); 
    $("#progess-2").addClass("inactive"); 
    $("#progess-3").addClass("inactive"); 
    } 
}); 

Я знаю, что это не лучший способ acomplish это (Даже если код работает), я должен повторить то же самое снова и снова. Я пробовал prev(), но он, похоже, не работал.

Каков наилучший способ?

EDIT: Чтобы было ясно, что не все элементы отдельно от одного с active класса следует класс active, только те, которые до этого.

EDIT 2:

Текущая активность:

Пользователь на странице ?route=account/login&SSL, #progress-1 это дать класс .active.

Пользователь прогрессирует ?route=checkout/cart успешно, и #progress-1 дается класс .inactive и #progress-2 является .active

Пользователь прогрессирует ?route=checkout/checkout успешно, и #progress-1 & #progress-2 приведены класс .inactive и #progress-3 является .active и так далее.

+0

Я думаю, вы можете сделать что-то похожее на: $ ('. All-links'). AddClass ('inactive'); $ ('.' + location.search) .addClass ('active'). Дайте мне знать, если это имеет смысл. – Vnuuk

+0

@ Vnuuk Спасибо за помощь, но это не имеет для меня никакого смысла, поскольку я остаюсь noob в js. :) –

+0

Позвольте мне объяснить. # 1. Вам нужно изменить HTML и # progess-N идентификаторы, которые вы можете использовать в URL-адресе. Ясно? – Vnuuk

ответ

2
$(document).ready(function() { 

    // Re-set all on entry 
    $("#progess-1, #progess-2, #progess-3, #progress-4").removeClass("inactive active"); 

    // Then check for the correct one to make active 
    if(location.search == "?route=account/login&SSL") 
     $("#progess-1").addClass("active"); 
    else if(location.search == "?route=checkout/cart") 
    { 
     $("#progess-2").addClass("active"); 
     $("#progess-1").addClass("inactive"); 
    } 
    else if(location.search == "?route=checkout/checkout") 
    { 
     $("#progess-3").addClass("active"); 
     $("#progess-1,#progess-2").addClass("inactive"); 
    } 
    else if(location.search == "?route=checkout/success") 
    { 
     $("#progess-4").addClass("active"); 
     $("#progess-1,#progess-2,#progess-3").addClass("inactive"); 
    } 
}); 

Это также может быть достигнуто путем замены оператора if коммутатором.

+0

Спасибо за ответ, однако я считаю, что это не будет иметь предполагаемого воздействия - только элементы перед активным должны быть неактивными, а не теми, которые были после, так как пользователь еще не завершил этот раздел. –

+0

В вашем решении вы сказали, что он работает так, как вы намеревались, вы вручную устанавливаете предыдущие для неактивного вручную в каждом из операторов. –

+0

Извинения, написал слишком быстро. Ред. –

Смежные вопросы