2016-01-25 18 views
5

Ho uno script che aggiunge il valore da un elemento cliccato. Tuttavia, mi piacerebbe sostituire il valore con quello nuovo quando si fa clic.Sostituisce dinamicamente il parametro url

Esempio:

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

Script

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

primo parametro fornisce onclick ?fss=one e il secondo clic si ottiene? fss=one+two. Il link di reset lo cancella.

Tuttavia, desidero sostituire il valore "uno" con il valore "due" sul clic. Il valore è dinamico, quindi non posso fare if/Else url.replace con il valore conosciuto.

Come posso fare?

Edit:

dimenticato di dire che ci possono essere altri parametri nell'URL. Esempio:

Primo scatto dà

?fss=one 

e quando si fa un'azione che dà l'altro parametro ho citato dà questo:

?param=list&fss=one 

che è corretto utilizzando lo script da Brijesh utente chowdary lavu. Param = list è un parametro che deve essere sempre il primo, ed è scritto per farlo e cambia da lista a largelist, questo funziona anche con quello script.

problema è quando clicco sul mio classe specifica per la seconda volta - invece di andare da

?param=list&fss=one 

a

?param=list&fss=two 

sostituisce tutto per

?fss=one 
+2

provare questi anwers http: // StackOverflow.it/questions/5999118/add-or-update-query-string-parameter – gurvinder372

risposta

0

Prova questo.

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

O con metodi semplici stringhe, è possibile aggiungere una funzione per lo script come qui di seguito, in modo che gli altri parametri non devono cambiare:

$(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

beh, forse, ma certamente non una soluzione generale in quanto non funzionerebbe se avesse? fss = one & foo = bar – Gavriel

+0

Funziona - ma fallisce se Ho un altro parametro nell'URL, che sostituisce anche quello, invece di aggiungerlo, voglio solo sostituire il valore della classe specificata. Forse dovrei dire che questo potrebbe essere il caso. – user3344734

+0

Hmm la seconda parte non sembra funzionare - mi ha dato un url di/httone quando era presente un altro parametro. – user3344734

0

È necessario monitorare il parametro fss (non il valore) e sostituire il valore di tutto il tempo.

Il modo migliore per farlo è split dal punto di fss.

//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'); 

E per il reset

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

Ciao Charlie e grazie per la risposta. Tuttavia, non riesco a farlo funzionare, vorresti essere gentile a mostrarmi come farlo funzionare con la mia opzione di reset? – user3344734

+0

Mi dispiace, c'è stato un errore. Risposta aggiornata 'split' crea una matrice fuori dalle parti della stringa sans il delimitatore (fss). Ecco la teoria qui. –

Problemi correlati