2016-01-25 95 views
5

我有一個腳本,它添加了單擊元素的值。但是 - 我想單擊時用新的替換值。動態替換url參數

例子:

<ul class="acfilter"> 
<li><a href="reset">reset</a></li> 
<li><a href="One">One</a></li> 
<li><a href="Two">Two</a></li> 
</ul> 

腳本

$(document).ready(function() { 
    $('ul.acfilter li a').on('click', function(e) { 
     e.preventDefault(); 
     if ($(this).attr('href') != "reset") { 
      if (location.href.indexOf('?') === -1) { 
       location.href = location.href + "?fss=" + $(this).attr('href'); 
      } else { 
       location.href = location.href + "+" + $(this).attr('href'); 
      } 
     } else { 
      location.href = location.origin + location.pathname; 
     } 
    }); 
}); 

第一個參數的onclick給?fss=one和第二點擊你? fss=one+two。重置鏈接清除它。

但是 - 我想用點擊上的「two」值替換「one」值。該值是動態的 - 所以我不能用已知值做If/Else url.replace。

我該怎麼做?

編輯:

忘了提,有可以在URL等參數。例如:

首先點擊給出

?fss=one 

和做,讓其他的參數,我提到這一個動作時,給出了這樣的:

?param=list&fss=one 

通過使用腳本從用戶brijesh是正確的chowdary lavu。 param = list是一個始終必須是第一個參數,並且被寫入來執行此操作並且從list更改爲largelist,這也適用於該腳本。

問題是,當我在我的特定類單擊第二次 - 而不是從

?param=list&fss=one 

?param=list&fss=two 

它取代一切

?fss=one 
+2

嘗試這些anwers的http://計算器。com/questions/5999118/add-or-update-query-string-parameter – gurvinder372

回答

0

試試這個。

$('ul.acfilter li a').on('click', function(e) { 
    e.preventDefault(); 
    if ($(this).attr('href') != "reset") { 
     if (location.href.indexOf('?') === -1) { 
      location.href = location.href + "?fss=" + $(this).attr('href'); 
     } else { 
      location.href = location.origin + location.pathname + "?fss=" + $(this).attr('href'); 
     } 
    } else { 
     location.href = location.origin + location.pathname; 
    } 
}); 

或用簡單的字符串的方法,您可以添加一個功能到腳本像下面,讓其他參數沒有發生變化:

$(document).ready(function() { 
$('ul.acfilter li a').on('click', function(e) { 
    e.preventDefault(); 
    if ($(this).attr('href') != "reset") { 
     if (location.href.indexOf('?') === -1) { 
      location.href = location.href + "?fss=" + $(this).attr('href'); 
     } else { 
      location.href = changeParameter(window.location.toString(),"fss",$(this).attr('href')); 
     } 
    } else { 
     location.href = location.origin + location.pathname; 
    } 
}); 

}); 
    function changeParameter(str,par,val) 
    { 
      var t1 = str.indexOf(par); 
      var t3 = t1+par.length+1; 
      var t2= str.indexOf("&",t3); 
      if(t2==-1) 
      { 
       return str.substring(0,t3)+val; 
      } 
      else 
      { 
       return str.substring(0,t3)+val+str.substring(t2); 
      } 
    } 
+0

好吧,也許,但肯定不是一個通用的解決方案,因爲它不會工作,如果他有?fss = one&foo = bar – Gavriel

+0

這個工作 - 但如果失敗if我在url中有另一個參數 - 它然後替換那個,而不是添加它 - 我只想從指定的類中替換值。也許應該提到這可能是這種情況。 – user3344734

+0

嗯,第二部分似乎不工作 - 當另一個參數存在時,它給了我一個/ httone的url。 – user3344734

0

你需要跟蹤你的參數fss(而不是價值)並一直替換它的價值。

執行此操作的最佳方法是從fss開始的split

//Lets split the href by the param fss 
var urlParts = location.href.split("fss"); 

//Insert your new value together with the param. (split removes the param) 
if (location.href.indexOf("?") < 0) 
    location.href = urlParts[0] + "?fss=" + $(this).attr('href'); 
else  
    location.href = urlParts[0] + "fss=" + $(this).attr('href'); 

而對於復位

location.href = location.href.split("fss")[0]; 
+0

嗨查理和謝謝你的答覆。但是 - 我似乎無法得到這個工作,你會不會讓我知道如何編寫它來使用我的重置選項? – user3344734

+0

對不起 - 有一個錯誤。答案已更新。 'split'在字符串的部分之外創建一個數組sans the delimiter(fss)。這就是理論。 –