заменить значение строки запроса URL при изменении выпадающего списка - PullRequest
6 голосов
/ 20 января 2012

У меня есть выпадающий список, который имел двойную роль. Пользователь может сразу зайти на страницу (http://mysite/events/Pages/default.aspx)) и использовать раскрывающийся список, или же он может сначала выполнить поиск, а затем выполнить поиск, выбрав раскрывающийся список. URL первого случая будет похож на http://mysite/events/Pages/default.aspx?hos=Carmel и URL второго случая http://mysite/events/Pages/default.aspx?kwd=health&type=Events&hos=Carmel Это то, что я делаю прямо сейчас, но оно ведет себя странно и делает что-то подобное с URL http://mysite.events/Pages/default.aspx?hos=Crown&hos=Carmel

Таким образом, если пользователь впервые выбрал carmel из раскрывающегося списка и решил, что хочет найти Индианаполис, он должен либо заменить 'Carmel' на индианаполис, либо заменить всю цепочку запросов "& hos = Carmel" на "& hos = Indianapolis "для второго случая и"? hos = Carmel "с"? hos = Indianapolis "для первого сценария

$(".hospitalDropDown").change(function(e){
            var querystring=window.location.search;
            var currentURL=$(location).attr('href');
            if(location.href.indexOf('?') == -1) {
                window.location.href= 'http://mysite/events/Pages/default.aspx'+'?hos='+$(this).val();
                }
                else{

                    window.location.href = ( $(this).val() == "All Hospitals" ) ? 'http://mysitesite/events/Pages/default.aspx': location.href +'&hos='+ $(this).val(); }
    )};

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

function replaceQueryString(url,param,value) {
    var re = new RegExp("([?|&])" + param + "=.*?(&|$)","i");
    if (url.match(re))
        return url.replace(re,'$1' + param + "=" + value + '$2');
    else
        return url + '&' + param + "=" + value;
}

Ответы [ 2 ]

7 голосов
/ 20 января 2012

Вам нужно сделать что-то вроде этого:

function replaceQueryString(url,param,value) {
    var re = new RegExp("([?|&])" + param + "=.*?(&|$)","i");
    if (url.match(re))
        return url.replace(re,'$1' + param + "=" + value + '$2');
    else
        return url + '&' + param + "=" + value;
}

$(".hospitalDropDown").change(function(e) {
   window.location.href = replaceQueryString(window.location.href, 'hos', $(this).val());
)};

Фрагмент replaceQueryString, который вы нашли, уже был упакован в аккуратную небольшую функцию для вас, поэтому вам не нужно ничего знать о регулярных выраженияхиспользовать это.Все, что вам нужно сделать, это передать этой функции свой URL, параметр, который вы пытаетесь изменить ("hos"), и новое значение.

Кроме того, $(location).attr('href') не действительно допустимо, и вы не 'не используйте его в любом случае, так что просто возьмите его и придерживайтесь window.location.href.

Наконец, хотя вам не нужны никакие знания регулярных выражений в этом конкретном случае, вы определенно могли бы извлечь выгоду из изучения хотя бы некоторого базового регулярного выражениясинтаксис.Посмотрите на http://www.regular -expressions.info / для некоторых хороших объяснений, а затем используйте тестер регулярных выражений, такой как http://www.regextester.com/, чтобы поиграться с примерами и попытаться написать некоторые свои собственные.

0 голосов
/ 20 января 2012
$(".hospitalDropDown").change(function(e){
    var newhos=($(this).val() == "All Hospitals" ) ? '' : '$1hos=' + $(this).val();
    location.href=location.href.replace(/([\?\&])hos=\w+/,newhos);
});
...