2013-06-05 34 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