2012-03-27 33 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); 
} 
相關問題