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