如何检查字符串/参数是否在URL上,如果没有添加它

时间:2012-03-27 07:57:02

标签: jquery url

我有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?year=2011

但我想做的是用户可以选择这两个参数。所以网址可能是www.domain.com/search?type=something&year=2011,但我不知道该怎么做。

我尝试了一些东西但是它总是在最后添加新参数,最终URL如下:www.domain.com/search?type=something&year=2011&type=something&year=2011&type =东西&安培;年= 2011

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式对象并解析&?的查询字符串,以了解是否存在某些参数。

所以,这是主要想法(http://jsfiddle.net/RtCte/)的js代码:

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);
}

答案 1 :(得分:0)

您可以将所有当前查询字符串解析为对象/数组,然后更新或添加到该对象,最后从该对象构建新的查询字符串。这将确保每个人都有一个,并且他们正确设置。