2013-06-05 60 views
27

原始地址:刪除參數的URL使用JavaScript

http://yourewebsite.php?id=10&color_id=1 

顯示的網址:

http://yourewebsite.php?id=10 

我得到了功能附加帕拉姆

function insertParam(key, value){ 
    key = escape(key); value = escape(value); 
    var kvp = document.location.search.substr(1).split('&'); 
    var i=kvp.length; var x; while(i--) 
    { 
     x = kvp[i].split('='); 

     if (x[0]==key) 
     { 
      x[1] = value; 
      kvp[i] = x.join('='); 
      break; 
     } 
    } 
    if(i<0) {kvp[kvp.length] = [key,value].join('=');} 

    //this will reload the page, it's likely better to store this until finished 
    document.location.search = kvp.join('&'); 
} 

,但我需要的功能來刪除參數

+1

就在阿里納斯 - 你沒」打開花,宣告你的函數後的括號內。 – jdepypere

+1

我們需要更多細節:根據什麼去除?只有最後一個?基於關鍵? –

+0

如果你只想要第一個參數(id),你可以'分開(「&")[0];' – tymeJV

回答

59

試試這個。只需傳入要從URL和原始URL值中刪除的參數,該函數將爲您刪除它。

function removeParam(key, sourceURL) { 
    var rtn = sourceURL.split("?")[0], 
     param, 
     params_arr = [], 
     queryString = (sourceURL.indexOf("?") !== -1) ? sourceURL.split("?")[1] : ""; 
    if (queryString !== "") { 
     params_arr = queryString.split("&"); 
     for (var i = params_arr.length - 1; i >= 0; i -= 1) { 
      param = params_arr[i].split("=")[0]; 
      if (param === key) { 
       params_arr.splice(i, 1); 
      } 
     } 
     rtn = rtn + "?" + params_arr.join("&"); 
    } 
    return rtn; 
} 

要使用它,只需做這樣的事情:

var originalURL = "http://yourewebsite.com?id=10&color_id=1"; 
var alteredURL = removeParam("color_id", originalURL); 

的VAR alteredURL將是你想要的輸出。

希望它有幫助!

+0

哇!謝謝。這對我真的很有幫助。非常感謝。 – Jows

+2

如果它去掉所有參數,你不想使用這一行: rtn = rtn +「 ?「+ params_arr.join(」&"); 你想要測試,如果params_arr.length> 0先 – oknate

+0

你可能看我ñ我編輯的其他答案直接推送你的新網址到網址欄。 –

7
function removeParam(parameter) 
{ 
    var url=document.location.href; 
    var urlparts= url.split('?'); 

if (urlparts.length>=2) 
{ 
    var urlBase=urlparts.shift(); 
    var queryString=urlparts.join("?"); 

    var prefix = encodeURIComponent(parameter)+'='; 
    var pars = queryString.split(/[&;]/g); 
    for (var i= pars.length; i-->0;)    
     if (pars[i].lastIndexOf(prefix, 0)!==-1) 
      pars.splice(i, 1); 
    url = urlBase+'?'+pars.join('&'); 
    window.history.pushState('',document.title,url); // added this line to push the new url directly to url bar . 

} 
return url; 
} 

這將解決您的問題

+0

已將window.history.pushState與替換從http://stackoverflow.com/a/7171293/2067690結合 - 工作良好。 – HumanInDisguise

+1

我會使用document.location.search只是分裂,它需要像這樣的東西添加到保存散列 如果(document.location.hash){ url = url + document.location.hash; } – Cameron

+0

我會使用'replaceState'而不是'pushState'。這是一個意見問題,但我不認爲從url中刪除參數應該是一個新的歷史狀態。 – pmrotule