2016-01-25 11 views
5

Mam skrypt, który dodaje wartość z klikniętego elementu. Jednak - po kliknięciu chciałbym zastąpić wartość nową.Zamień dynamicznie parametr url

Przykład:

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

Pierwszy parametr onclick daje ?fss=one i na drugim kliknij dostać? fss=one+two. Link resetujący usuwa to.

Jednak - chciałbym zastąpić wartość "jeden" wartością "dwa" na kliknięciu. Wartość jest dynamiczna - więc nie mogę po prostu zrobić If/Else url.replace ze znaną wartością.

Jak to zrobić?

Edit:

Zapomniałem wspomnieć, że mogą istnieć inne parametry w adresie URL. Przykład:

Pierwsze kliknięcie daje

?fss=one 

i tym, gdy robi akcję, która daje inny parametr I wspomnieć, że daje to:

?param=list&fss=one 

która jest prawidłowa za pomocą skryptu z Brijesh użytkownika chowdary lavu. Lista param = jest parametrem, który zawsze musi być pierwszy i jest napisany, aby to zrobić i zmienia się z listy na largelistę, działa to również z tym skryptem.

Problem jest po kliknięciu na mojej konkretnej klasy po raz drugi - zamiast iść z

?param=list&fss=one 

do

?param=list&fss=two 

zastępuje wszystko

?fss=one 
+2

spróbować te anwers http: // stackoverflow.com/questions/5999118/add-or-update-query-string-parameter – gurvinder372

Odpowiedz

0

Spróbuj tego.

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

Albo z prostych metod smyczkowych, można dodać funkcję do skryptu jak poniżej, tak że inne parametry nie muszą zmieniać:

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

cóż, być może, ale z pewnością nie jest to ogólne rozwiązanie, ponieważ nie działałoby, gdyby miał? fss = one & foo = bar – Gavriel

+0

Działa to - ale kończy się niepowodzeniem, jeśli Mam inny parametr w adresie URL - on również zastępuje ten parametr, zamiast go dodawać - chcę tylko zastąpić wartość z określonej klasy. Może powinienem wspomnieć, że tak może być. – user3344734

+0

Hmm druga część nie wydaje się działać - dała mi URL/httone, gdy obecny był inny parametr. – user3344734

0

Musisz śledzić parametr fss (nie wartość) i cały czas wymieniać jego wartość.

Najlepszym sposobem na zrobienie tego jest split od punktu 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'); 

I resetowania

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

Cześć Charlie i dzięki za odpowiedź. Jednak - wydaje mi się, że to nie działa, czy byłbyś uprzejmy pokazać mi, jak napisać to do pracy z moją opcją resetowania? – user3344734

+0

Przepraszam - był błąd. Odpowiedź zaktualizowana. 'split' tworzy tablicę z części łańcucha bez ogranicznika (fss). Ta teoria tutaj. –

Powiązane problemy