2013-06-05 21 views
27

URL originale:Rimuovere un parametro per l'URL con JavaScript

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

risultante URL:

http://yourewebsite.php?id=10 

ho avuto la funzione di aggiunta di Param

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('&'); 
} 

ma ho bisogno di funzionare a elimina Param

+1

Solo un sidenote - si didn' aprire il riccio, staffe dopo aver dichiarato la funzione. – jdepypere

+1

Abbiamo bisogno di maggiori dettagli: rimuovere in base a cosa? Solo l'ultimo? Basato sulla chiave? –

+0

Se si desidera solo il primo parametro (id), si può 'split (" &")[0]; ' – tymeJV

risposta

59

Prova Questo. Basta passare il parametro che desideri rimuovere dall'URL e il valore dell'URL originale e la funzione lo spoglierà per te.

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; 
} 

Per utilizzarlo, è sufficiente fare qualcosa di simile:

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

Il var alteredURL sarà l'output desiderato.

Spero che aiuti!

+0

Wow! Grazie. Mi aiuta davvero. Grazie mille – Jows

+2

se toglie tutti i parametri, non vorrai usare questa riga: rtn = rtn + " ? "+ params_arr.join (" &"); si vorrebbe testare prima se params_arr.length> 0. – oknate

+0

Si può guardare i Nell'altra risposta ho modificato per inviare il tuo nuovo URL direttamente alla barra degli indirizzi. –

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; 
} 

Questo risolverà il problema

+0

Hanno combinato il window.history.pushState con la sostituzione da http://stackoverflow.com/a/7171293/2067690 - funziona bene – HumanInDisguise

+1

Vorrei usare document.location.search di una semplice divisione, e ha bisogno di qualcosa di simile aggiunto per preservare l'hash if (document.location.hash) { url = url + document.location.hash; } – Cameron

+0

Vorrei usare 'replaceState' invece di' pushState'. È una questione di opinione, ma non credo che la rimozione di un parametro dall'url debba essere un nuovo stato cronologico. – pmrotule

Problemi correlati