URL регулярного выражения JavaScript (подстрока URL)

0

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

Если я открою 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 "/users/": // match "/users/any_id/"
        $(document).ready(function() {
            $(".nav li:nth-child(6)").addClass("active");
        });
        break;

    default:
        alert("debug");
    }
}

setGUI();
  • 0
    switch не может справиться с этим .... вам нужно использовать if elseif
  • 0
    @ArunPJohny - есть (по крайней мере) два способа, которыми коммутатор может выполнить это требование: (а) сохранить существующий коммутатор, но перед сравнением удалить конец URL, или (б) «обмануть» с помощью switch(true) и поставить условия в каждом case .
Теги:

2 ответа

1
Лучший ответ

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

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

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

  • 0
    спасибо, это работает для меня ... только "/ users / id / edit" не работает. есть идеи?
  • 0
    Ваш пользовательский случай - это case "/users/" - попробуйте изменить его на case "/users" (удалите завершающий / чтобы он соответствовал формату других URL).
Показать ещё 3 комментария
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 лучше, но это не единственный способ.)
  • 0
    Спасибо за это. Я перефразирую это предложение.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню