为什么 window.location.href.split("?") 数组本身会改变它的值
Why window.location.href.split("?") array is changing its value itself
我试图通过在 URL 中提供单选按钮的值作为查询参数来在单击单选按钮(城市列表)时重新加载页面。假设我现在的 URL 是
http://localhost:3001/offers?category=Dining&sub_categories=Home%20Delivery&city=
并且在选择任何单选按钮时,我希望将其值添加到 URL 中的 city
参数。
所以期望 URL 应该是
http://localhost:3001/offers?category=Dining&sub_categories=Home%20Delivery&city=Mumbai
但问题是在修改 URL 时,sub_categories
会自动被剥离,最终 URL 我得到的是这个。
http://localhost:3001/offers?category=Dining&city=Mumbai
这是我用于操作 URL:
的代码
$(document).on('click', '.city-selector' ,function(event) {
event.preventDefault() ;
var city_name = this.labels[0].textContent.trim().split("(")[0].trim() ;
var location_string = window.location['href'].split('?');
if(location_string.length > 1 && location_string[1].indexOf("city") > -1){
var all_params = location_string[1].split("&") ;
all_params.splice(all_params.indexOf("city=" + gon.selected_city), 1) ;
all_params.splice(all_params.indexOf("localities=" + gon.selected_localities), 1) ;
gon.selected_localities = '' ;
location_string[1] = all_params.join("&") ;
location_string[1] = location_string[1] + "&city=" + city_name ;
window.location.href = location_string[0] + "?" +location_string[1] ;
}
}) ;
HINT: 问题出在行上
location_string = window.location['href'].split('?');
当我记录 location_string
数组时,它不包含 sub_categories
参数。
Nou 确定是什么东西在剥离它。
实现此目的的一种方法是:
var url = window.location.href;
var urlParams = url.split('?');
if(urlParams.length > 1) {
urlParams = urlParams[1].split('&');
urlParams.map(函数(参数){
if(param.index('city=')){
return param += city_name;
}
return param;
})
window.location.href = url.split('?')[0] + '?' + urlParams.join('&');
} 否则 {
window.location.href = url参数[0] + '?' + 'city=' + city_name;
}
我认为你应该使用正则表达式来替换 url:
var url = 'http://localhost:3001/offers?category=Dining&sub_categories=Home%20Delivery&city=';
var cityName = 'Mumbai';
var cityParams = 'city=' + cityName;
var newUrl = url + '&' + cityParams;
if (url.indexOf('?') === -1) {
newUrl = url + '?' + cityParams;
} else if (url.indexOf('city=') > -1) {
newUrl = url.replace(/(city=[\w\d%_]*)/g, cityParams);
}
它还与 url 一起工作,例如:
http://localhost:3001/offers?category=Dining?city=hanoi&sub_categories=Home%20Delivery
我试图通过在 URL 中提供单选按钮的值作为查询参数来在单击单选按钮(城市列表)时重新加载页面。假设我现在的 URL 是
http://localhost:3001/offers?category=Dining&sub_categories=Home%20Delivery&city=
并且在选择任何单选按钮时,我希望将其值添加到 URL 中的 city
参数。
所以期望 URL 应该是
http://localhost:3001/offers?category=Dining&sub_categories=Home%20Delivery&city=Mumbai
但问题是在修改 URL 时,sub_categories
会自动被剥离,最终 URL 我得到的是这个。
http://localhost:3001/offers?category=Dining&city=Mumbai
这是我用于操作 URL:
的代码$(document).on('click', '.city-selector' ,function(event) {
event.preventDefault() ;
var city_name = this.labels[0].textContent.trim().split("(")[0].trim() ;
var location_string = window.location['href'].split('?');
if(location_string.length > 1 && location_string[1].indexOf("city") > -1){
var all_params = location_string[1].split("&") ;
all_params.splice(all_params.indexOf("city=" + gon.selected_city), 1) ;
all_params.splice(all_params.indexOf("localities=" + gon.selected_localities), 1) ;
gon.selected_localities = '' ;
location_string[1] = all_params.join("&") ;
location_string[1] = location_string[1] + "&city=" + city_name ;
window.location.href = location_string[0] + "?" +location_string[1] ;
}
}) ;
HINT: 问题出在行上
location_string = window.location['href'].split('?');
当我记录 location_string
数组时,它不包含 sub_categories
参数。
Nou 确定是什么东西在剥离它。
实现此目的的一种方法是:
var url = window.location.href;
var urlParams = url.split('?');
if(urlParams.length > 1) {
urlParams = urlParams[1].split('&');
urlParams.map(函数(参数){
if(param.index('city=')){
return param += city_name;
}
return param;
})
window.location.href = url.split('?')[0] + '?' + urlParams.join('&');
} 否则 {
window.location.href = url参数[0] + '?' + 'city=' + city_name;
}
我认为你应该使用正则表达式来替换 url:
var url = 'http://localhost:3001/offers?category=Dining&sub_categories=Home%20Delivery&city=';
var cityName = 'Mumbai';
var cityParams = 'city=' + cityName;
var newUrl = url + '&' + cityParams;
if (url.indexOf('?') === -1) {
newUrl = url + '?' + cityParams;
} else if (url.indexOf('city=') > -1) {
newUrl = url.replace(/(city=[\w\d%_]*)/g, cityParams);
}
它还与 url 一起工作,例如: http://localhost:3001/offers?category=Dining?city=hanoi&sub_categories=Home%20Delivery