2012-03-27 70 views
0

我有jQuery从表单选择选项获取参数并将其添加到URL以进行搜索。但目前,我的JS删除了旧的东西,并一直替换为新的东西。下面是当前:如何检查字符串/参数是否在URL上,如果不添加它

$("#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 &年= 2011 &类型=东西&年= 2011 & type = something & year = 2011

感谢您的帮助!

回答

0

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

1

您可以使用正则表达式对象和解析查询字符串&?了解是否有一些参数。

所以,这里的主要思想的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); 
} 
相关问题