2013-12-04 5 views
0

Эй, ребята, я написал простую функцию, которая читает текущий url и устанавливает какой-то изюминкой.javascript regex url (url substring)

Если я открою URL-адрес, все будет хорошо, но если я сделаю более продвинутый запрос, он не будет работать.

пример: если я запрашиваю «/ customers», это работает, но если я попрошу «/ customers/10», он больше не работает. Может ли кто-нибудь предоставить мне какое-нибудь регулярное действие?

Заранее спасибо

function setGUI() { 
var url = window.location.pathname; 
switch(url) { 
    case "/orders": 
     $(document).ready(function() { 
      $(".nav li:nth-child(2)").addClass("active"); 
     }); 
     break; 

    case "/customers": // match "customers/any_id" 
     $(document).ready(function() { 
      $(".nav li:nth-child(3)").addClass("active"); 
     }); 
     break; 

    case "/partners": match "partners/anyid" 
     $(document).ready(function() { 
      $(".nav li:nth-child(4)").addClass("active"); 
     }); 
     break; 

    case "/help": 
     $(document).ready(function() { 
      $(".nav li:nth-child(5)").addClass("active"); 
     }); 
     break; 

    case "https://stackoverflow.com/users/": // match "https://stackoverflow.com/users/any_id/" 
     $(document).ready(function() { 
      $(".nav li:nth-child(6)").addClass("active"); 
     }); 
     break; 

    default: 
     alert("debug"); 
    } 
} 

setGUI(); 
+0

выключатель не может справиться с этим .... вам нужно использовать 'если elseif' построить –

+0

@ArunPJohny - Есть (по крайней мере) два способа коммутатор может обрабатывать это требование: (а) сохранить существующий переключатель, но удалять конец URL перед сравнением, или (б) «обмануть» с помощью «switch (true)» и поместить условия в каждый «случай». – nnnnnn

ответ

1

Похоже, ваша функция не нужно использовать любую информацию, может быть после того, как второй косой черты, так что я предложил бы просто удалить все, от второго слеша года:

var url = window.location.pathname.replace(/^(\/[^/]+)\/.*/, "$1"); 

... а затем оставьте свои условия переключения и случая, как они есть.

+0

спасибо, что это работает для меня ... только «/ users/id/edit» не работает. есть идеи? – user3008711

+0

Элемент вашего пользователя - «случай»/users/«' - попробуйте изменить его на «case»/​​users »' (удалите конечный '/' так, чтобы он соответствовал формату других URL-адресов). – nnnnnn

+0

Я сделал все тот же результат – user3008711

0

Коммутатор будет оценивать базу на основе равенства. Одним из решений является использование if-else. я бы рекомендовал использовать indexOf:

.. 
if(url.indexOf("/orders") > -1){ 
     $(document).ready(function() { 
      $(".nav li:nth-child(2)").addClass("active"); 
     }); 
}else if(url.indexOf("/customers") > -1){ 
.. 
+0

_ «Вам нужно ...» _ - Ну нет, вы не знаете, есть, по крайней мере, два способа, которыми вы можете использовать переключатель для достижения этого. (Возможно, структура if/else if лучше, но это не единственный способ.) – nnnnnn

+0

Спасибо за это. Я передумаю это предложение. –

+0

спасибо за ваше время @RussellGutierrez – user3008711