2013-06-05 17 views
27

ile URL'ye Orijinal URL'yi bir parametre çıkarın ben ParamJavaScript

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

ekleyerek işlevi var ama ben çalışabilmesi için gereken

http://yourewebsite.php?id=10 

kaldır Param

+1

Sadece bir dipnot düşmek çözecektir - Eğer kıvırcık açmak değil mi', senin fonksiyonunu ilan ettikten sonra parantez. – jdepypere

+1

Daha fazla ayrıntıya ihtiyacımız var: neye göre kaldırılsın? Sadece son? Anahtar dayanarak mı? –

+0

Yalnızca ilk parametreyi (id) istiyorsanız, bölebilirsiniz ("&")[0];" – tymeJV

cevap

59

bu. Sadece URL'den ve orijinal URL değerinden kaldırmak istediğiniz paramı iletin ve işlev sizin için dışarı çıkaracaktır. Arzu çıkışı olacaktır

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

Var alteredURL: Kullanmak için

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

, sadece böyle bir şey yapmak.

Umut eder!

+0

Wow! Teşekkürler. Bu gerçekten yardımcı olur. Çok teşekkürler. – Jows

+2

eğer tüm parametreleri sorarsa, bu satırı kullanmak istemezsiniz: rtn = rtn + " "+ params_arr.join (" &"); Eğer params_arr.length> 0 olup olmadığını test etmek istersiniz. – oknate

+0

Siz n yeni cevabınızı doğrudan URL'ye yönlendirmek için düzenlediğim diğer cevap. –

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

Bu problemi

+0

http://stackoverflow.com/a/7171293/2067690 adresinden window.history.pushState öğesini birleştirdikten sonra iyi çalışıyor. – HumanInDisguise

+1

Bunun yerine document.location.search kullanmalıyım sadece bölme ve bunun gibi bir şeye ihtiyaç duyar ( (document.location.hash) { url = url + document.location.hash; } – Cameron

+0

"pushState" yerine "replaceState" kullanırım. Bu bir fikir meselesi, ancak bir parametrenin url'den kaldırılmasının yeni bir tarih durumu olması gerektiğini düşünmüyorum. – pmrotule