我需要仅使用Javascript更新链接中的日期(采用YYYY-MM-DD格式)。该页面有100个链接,但始终是相同的核心URL。查询字符串变量名称总是相同,但某些变量值会发生变化。但是日期都是一样的 - 它们需要是明天的日期,因此当页面被调用时,日期将始终是第二天。
我可以将日期移到URL查询字符串的开头或结尾,但我不愿意。
我知道document.write不是一种优雅的方式,因此请在这里寻求建议。
遗憾的是,服务器端技术不是一个选项,因此需要Javascript。
website.com/buy-ticket?from=Manchester&to=London&dateDepart=2014-08-07&dateArrive=2014-08-07 website.com/buy-ticket?from=Liverpool&to=York&dateDepart=2014-08-07&dateArrive=2014-08-07
我们安装了JQuery,如果它更容易。
答案 0 :(得分:0)
试试这段代码:
<script>
var param1var = getQueryVariable("dateDepart");
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
console.log ('Query Variable ' + variable + ' was not found !');
}
</script>
答案 1 :(得分:0)
理想情况下,您应该执行此服务器端,因为它不依赖于您的网站的访问者启用了JavaScript。但是,正如您所说,这不是一个选项,您仍然可以使用JavaScript执行此操作。有很多方法可以实现这一点,下面是我将如何解决它:
(function () {
"use strict";
var parseQueryString = function parseQueryString(qs) {
var params = qs.split('&'), // split up into individual parameter/value pairs
kvp = []; // declare an array
params.forEach(function (pairing, index, array) {
var pair = pairing.split('='), // split up into key/value
key = pair[0], // key will always be on left side
value = pair[1] || ''; // value, if defined, will be on right, otherwise default to an empty string
kvp.push({ // add to the array as an object
"key": key,
"value": value
});
});
return kvp; // return the array
},
swapParameters = function swapParameters(kvp, params) {
var key;
for (key in params) { // loop through the parameters
if (params.hasOwnProperty(key)) {
kvp.forEach(function (pair, index, array) { // loop through the key-value pairs
if (key === pair.key) { // if one of them matches the current parameter
pair.value = params[key]; // update the value of the pair to the new parameter value
}
});
}
}
return kvp; // return the modified key-value pairs
},
stringifyKVP = function stringifyKVP(kvp) {
var s = []; // declare an array
kvp.forEach(function (pair, index, array) { // loop through the key-value pairs
s.push('' + pair.key + '=' + pair.value); // create a string of key=value and push to the array
});
return s.join('&'); // use join to return the stringified key-value pairs separated with an &
},
padLeft = function padLeft(value, places) { // quick & dirty pad function
var padding = Array(places - value.toString().length + 1).join('0'),
padded = padding + value;
return padded;
},
getFormattedDate = function getFormattedDate(date) { // quick & dirty format date function
var yyyy = date.getFullYear().toString(),
mm = padLeft(date.getMonth() + 1, 2),
dd = padLeft(date.getDate(), 2);
return yyyy + '-' + mm + '-' + dd;
},
testUrl1 = 'website.com/buy-ticket?from=Manchester&to=London&dateDepart=2014-08-07&dateArrive=2014-08-07',
testUrl2 = 'website.com/buy-ticket?from=Liverpool&to=York&dateDepart=2014-08-07&dateArrive=2014-08-07',
today = getFormattedDate(new Date()), // get the current date formatted as YYYY-MM-DD
test = function test(url) { // tie it all together
var parts = url.split('?'), // split the querystring from the url
resource = parts[0], // host & path are always left side
qs = parts[1], // qs is always right side, assumes qs always exists
kvp = parseQueryString(qs), // break the qs up into key-value pairs
newParams = swapParameters(kvp, { // swap out new values
"dateDepart": today,
"dateArrive": today
});
qs = stringifyKVP(newParams); // get the new querystring
return resource + '?' + qs; // return the modified resource
};
console.log(test(testUrl1)); // log to console for proof of "working"
console.log(test(testUrl2));
}());
您可以在浏览器控制台中运行此功能。
就jQuery而言,jQuery将选择a
元素来处理更简单。像这样的选择器可以很好地完成这个技巧:
$('a[href^="website.com/buy-ticket?"]')
这将选择所有a
个href
属性以website.com/buy-ticket?
开头的元素。最后的问号应该确保查询字符串存在。您可能必须修改它以包含协议:
$('a[href^="http://website.com/buy-ticket?"]')
您也可以使用Attribute Contains Selector:
$('a[href*="website.com/buy-ticket?"]')