如何从网址的一部分保存字符串?

时间:2018-06-06 02:44:53

标签: javascript jquery

给出以下网址:

https://example.com/test/results/?usp-custom-14=2015+2017&usp-custom-8=United-States

如何保存三个变量:

var date1: "2015";
var date2: "2017";
var loc = "United States";

注意:我们在网址+中有两个带有2015+2017符号的日期,我们需要拆分它们。并在网址United-States中加注,我们需要United States

这就是我的尝试:

function getUrlVars() {
  var vars = [], hash;
  var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
  for(var i = 0; i < hashes.length; i++) {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
  }
  return vars;
}
var dates = getUrlVars()["usp-custom-14"];
var loc = getUrlVars()["usp-custom-8"];
var dateSplit = dates.split("+");

此外,我需要在加载页面后因其他原因再次更新URL,我这样做:

history.replaceState('data to be passed', 'Title of the page', '<?php echo getAddress(); ?>/?usp-custom-14='+dateSplit+'&usp-custom-8='+loc);

但网址是重复的

https://example.com/test/results/?usp-custom-14=2015+2017&usp-custom-8=United-States/?usp-custom-14=2015,2017&usp-custom-8=United-States

3 个答案:

答案 0 :(得分:2)

您可以在?上拆分网址并使用pop()返回结果数组的最后一个成员,这将是您查询字符串的全部内容。

从那里开始,您可以先将其拆分为键值对,然后先将其拆分为&,然后再转换为=

我把它放在一个函数中,这样你只需要在需要时做getParam("my-url-parameter")。使用此功能,然后处理特定参数的+-,您应该能够轻松获得所需内容。

在任何需要的地方也应该可以重复使用。

function getParam(key) {
    //var url = window.location.href;   (Doesn't work on StackOverflow, but would be used in your real environment)
    var url = "https://example.com/test/results/?usp-custom-14=2015+2017&usp-custom-8=United-States";
    var querystring = url.split("?").pop();
    var params = {};
    querystring.split("&").forEach((i) => params[i.split("=")[0]] = i.split("=")[1]); //Create key-value pairs
    return params[key] || null;
}

var uspCustom14 = getParam("usp-custom-14").split("+");
var date1 = uspCustom14[0];
var date2 = uspCustom14[1];
var country = getParam("usp-custom-8").replace(/\-/g, ' ');

console.log(`Date 1: ${date1},`, `Date 2: ${date2},`, `Country: ${country}`);

对于第二个问题,您可以删除查询字符串并使用正确的值重新添加:

var urlDates = getParam("usp-custom-14").replace('+',',');
var urlCountry = getParam("usp-custom-8");
history.replaceState('data to be passed', 'Title of the page', `${window.location.href.split("?")[0]}?usp-custom-14=${urlDates}&usp-custom-8=${urlCountry}`);

答案 1 :(得分:1)

这应该可以为您提供您想要的内容,同时保持尽可能接近原始代码。您可以安全地拆分一个带有“+”的字符串。你有“?”并且“=”以错误的顺序拆分。

function getUrlVars() {
  var vars = [], hash;  
  var hashes = window.location.href.split('?')[1];
  var params = hashes.split('&');    
  for(var i = 0; i < params.length; i++) {  
     hash = params[i].split('=');
     vars.push(hash[0]);
     vars[hash[0]] = hash[1];    
}
return vars;
}
var dates = getUrlVars()["usp-custom-14"];
var loc = getUrlVars()["usp-custom-8"];
var dateSplit = dates.split("+");

答案 2 :(得分:0)

var str ="https://example.com/test/results/?usp-custom-14=2015+2017&usp-custom-8=United-States";
var split = str.split('usp-custom-14=');
var firstDate = split[1].split('+')[0];
var secondDate = split[1].substring(split[1].lastIndexOf("+")+1,split[1].lastIndexOf('&'));
var country = split[1].substring(split[1].lastIndexOf("=")+1,split[1].length-1).replace('-',' ');

console.log(firstDate);
console.log(secondDate);
console.log(country);