Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改下拉列表时替换URL查询字符串值_Javascript_Jquery_Regex_Url_Query String - Fatal编程技术网

Javascript 更改下拉列表时替换URL查询字符串值

Javascript 更改下拉列表时替换URL查询字符串值,javascript,jquery,regex,url,query-string,Javascript,Jquery,Regex,Url,Query String,我有一个双重角色的下拉列表。用户可以直接进入页面()并使用下拉菜单,也可以先进行搜索,然后通过选择下拉菜单进一步过滤搜索结果。 第一种情况的URL将类似于 及 第二个案例URL 这就是我现在正在做的,但它的行为很奇怪,对url做了类似的事情 因此,如果用户第一次从下拉列表中选择了carmel,并决定他/她要查找印第安纳波利斯,则应将“carmel”替换为印第安纳波利斯,或者将整个查询字符串“&hos=carmel”替换为第二种情况下的“&hos=Indianapolis”,将“&hos=carm

我有一个双重角色的下拉列表。用户可以直接进入页面()并使用下拉菜单,也可以先进行搜索,然后通过选择下拉菜单进一步过滤搜索结果。 第一种情况的URL将类似于 及 第二个案例URL 这就是我现在正在做的,但它的行为很奇怪,对url做了类似的事情

因此,如果用户第一次从下拉列表中选择了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(); }
    )};
我发现了一些使用正则表达式来处理查询字符串的漂亮代码,但我不明白正则表达式是如何工作的。在我的例子中,我怎么能使用下面这样的东西呢

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

您需要这样做:

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
代码片段已经打包在一个简洁的小函数中,因此您不需要了解任何关于regex的知识就可以使用它。您所需要做的就是将您的url、您试图更改的参数(“hos”)和新值传递给该函数

另外,
$(location.attr('href')
不是真正有效的,而且您也没有使用它,所以只需取出它并坚持使用
window.location.href


最后,尽管在这种特殊情况下您不需要任何正则表达式知识,但至少学习一些基本的正则表达式语法肯定会让您受益匪浅。请看一些好的解释,然后使用一个正则表达式测试仪来处理示例,并尝试编写一些自己的示例。

忽略您实际回答的问题-也许您应该将答案移到解释的前面,因此我建议更改window.location,因为window.location.href是当前url的字符串表示形式-因此请更改.href,但设置位置对象
$(".hospitalDropDown").change(function(e){
    var newhos=($(this).val() == "All Hospitals" ) ? '' : '$1hos=' + $(this).val();
    location.href=location.href.replace(/([\?\&])hos=\w+/,newhos);
});