给出以下网址:
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
答案 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);