Javascript 为什么window.location.href.split(";?";)数组本身正在更改其值

Javascript 为什么window.location.href.split(";?";)数组本身正在更改其值,javascript,arrays,string,browser,location-href,Javascript,Arrays,String,Browser,Location Href,我试图通过在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%2

我试图通过在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时,
子类别
会自动剥离,我得到的最终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] ;
    }

  }) ;
提示:问题在于
location_string=window.location['href'].split('?')
当我记录
位置\u字符串
数组时,它不包含
子\u类别
参数。

不知道是哪件东西把它剥掉了

实现这一目标的一种方法是:

var url=window.location.href

var urlParams=url.split(“?”)

如果(urlParams.length>1){

urlParams=urlParams[1]。拆分('&')

映射(函数(param){

})

window.location.href=url.split('?')[0]+'?'+urlparms.join('&')

}否则{

window.location.href=urlParams[0]+'?'+'城市='+城市名称


}实现这一目标的一种方法是:

var url=window.location.href

var urlParams=url.split(“?”)

如果(urlParams.length>1){

urlParams=urlParams[1]。拆分('&')

映射(函数(param){

})

window.location.href=url.split('?')[0]+'?'+urlparms.join('&')

}否则{

window.location.href=urlParams[0]+'?'+'城市='+城市名称


}

我认为应该使用正则表达式替换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,如:


我认为应该使用正则表达式替换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,如:


-负<代码>启动参数;没有
localities=
。无法复制这种行为,是不是有小提琴之类的东西?@Caramiriel正确地指出问题在于拼接方法。它的第一个参数是接收-1值,这就是它开始从后面剥离参数的原因,-负
start
parameter;没有
localities=
。无法复制这种行为,是不是有小提琴之类的东西?@Caramiriel正确地指出问题在于拼接方法。它的第一个参数是接收-1值,这就是它开始从后面剥离参数的原因,