我有jQuery,它从表单选择选项中获取参数,并将其添加到URL中进行搜索。但目前,我的JS总是删除旧的东西,用新的东西替换。这是目前的一个:
$("#year").change(function() {
var path = $(location).attr('href').split('?', 1);;
var year = $(this).val();
var search = path + '?year=' + year;
if ($(this).val() != '') {
window.open(search, '_self');
}
});
$("#type").change(function() {
var path = $(location).attr('href').split('?', 1);;
var type = $(this).val();
var search = path + '?type=' + type;
if ($(this).val()) {
window.open(search, '_self');
}
});
所以,如果用户从另一个选项中选择:www.domain.com/search?type=something或www.domain.com/search?年份=2011
但我想做的是,用户可以选择这两个参数。那么URL可能是www.domain.com/search?type=something&年份=2011年,但我不知道该怎么做。
我尝试了一些方法,但它总是在末尾添加新的参数,URL最终是这样的:www.domain.com/search?type=something&年份=2011&type=something&年份=2011&type=something&年份=2011
谢谢你的帮助!
您可以使用regexp对象并解析&
和?
的查询字符串,以了解是否存在一些参数。
因此,以下是主要思想的js代码(http://jsfiddle.net/RtCte/):
function replaceOrAdd(str, pattern, newValue) {
if (str.match(pattern)) {
// parameter is already defined
document.writeln(str.replace(pattern, newValue) + '<br />');
}
else if (str.indexOf("?") != -1) {
// query string exists, but without this parameter
document.writeln(str + "&" + newValue + '<br />');
}
else {
// there is no query string
document.writeln(str + "?" + newValue + '<br />');
}
}
var str = ["www.domain.com/search?type=something&year=2011",
"www.domain.com/search?year=2011&type=something",
"www.domain.com/search?type=something",
"www.domain.com/search?year=2011",
"www.domain.com/search"];
var patt1 = /type=[^&^$]+/i;
var patt2 = /year=[^&^$]+/i;
var newValue1 = "type=new"
var newValue2 = "year=1999"
for (var i = 0; i < str.length; i++) {
replaceOrAdd(str[i], patt1, newValue1);
}
document.write("<br/>");
for (var i = 0; i < str.length; i++) {
replaceOrAdd(str[i], patt2, newValue2);
}
您可以将所有当前查询字符串解析为一个对象/数组,然后更新或添加到该对象,最后从该对象构建新的查询字符串。这将确保每个都有一个,并且它们设置正确。