2011-10-03 4 views
5

Tak więc chcę zastąpić wartości zmiennych GET w url i jeśli zmienna nie istnieje, a następnie dodać ją do adresu URL.Dodawanie/modyfikowanie łańcucha zapytania/zmiennych GET w url za pomocą javascript

EDIT: Robię to do elementów href nie strony aktualnej lokalizacji ..

ja nie jestem dobry z javascript, ale wiem, jak używać jQuery całkiem dobrze i podstawami języka JavaScript. Wiem, jak napisać wyrażenie regularne, ale nie, jak używać składni javascript w regex i z jakich funkcji go używać.

Oto co mam do tej pory i to ma błąd na linii 3: Zobacz go na jsfiddle (lub poniżej): http://jsfiddle.net/MadLittleMods/C93mD/

function addParameter(url, param, value) { 
    var pattern = new RegExp(param + '=(.*?);', 'gi'); 
    return url.replace(pattern, param + '=' + value + ';'); 

    alert(url); 
} 
+1

Uwaga: Jak najszybciej zmienić URL strony jest przeglądarka będzie poruszać się w tym miejscu, więc może zmienić tylko raz. –

+1

Mogę to zmienić tyle razy, ile chcę. Edytuję element href, a nie stronę. – MLM

Odpowiedz

14

Nie ma potrzeby używania jQuery na tym. Wyrażenia regularne i funkcje łańcuchowe są wystarczające. Zobacz mój skomentował kod poniżej:

function addParameter(url, param, value) { 
    // Using a positive lookahead (?=\=) to find the 
    // given parameter, preceded by a ? or &, and followed 
    // by a = with a value after than (using a non-greedy selector) 
    // and then followed by a & or the end of the string 
    var val = new RegExp('(\\?|\\&)' + param + '=.*?(?=(&|$))'), 
     parts = url.toString().split('#'), 
     url = parts[0], 
     hash = parts[1] 
     qstring = /\?.+$/, 
     newURL = url; 

    // Check if the parameter exists 
    if (val.test(url)) 
    { 
     // if it does, replace it, using the captured group 
     // to determine & or ? at the beginning 
     newURL = url.replace(val, '$1' + param + '=' + value); 
    } 
    else if (qstring.test(url)) 
    { 
     // otherwise, if there is a query string at all 
     // add the param to the end of it 
     newURL = url + '&' + param + '=' + value; 
    } 
    else 
    { 
     // if there's no query string, add one 
     newURL = url + '?' + param + '=' + value; 
    } 

    if (hash) 
    { 
     newURL += '#' + hash; 
    } 

    return newURL; 
} 

A oto the Fiddle

Aktualizacja:

Kod obsługuje teraz przypadek, w którym istnieje hash na URL.

Edit

Niewykorzystany przypadek! Kod teraz sprawdza, czy istnieje ciąg zapytania w ogóle.

+0

Dzięki temu paczka działa świetnie! – MLM

+1

Zaktualizowano i dodano funkcję odczytu do tego skrzypce. Użyłem (; | i | $) zamiast twojego (& | $) - http://jsfiddle.net/MadLittleMods/4Pz8h/ – MLM

+1

Jak o [\\? &] Zamiast (\\? | \\ &) – Christophe

0

Zobacz Change URL parameters. Odpowiada na twoje pytanie w bardziej ogólny sposób (zmieniając dowolny parametr adresu URL). Istnieją rozwiązania zarówno dla jQuery, jak i zwykłego js w sekcji odpowiedzi.

Wygląda również na to, że url.replace powinno być location.replace, ale mogę się mylić (to stwierdzenie jest oparte na szybkim wyszukiwaniu google dla "url.replace javascript").

+0

To jest całkiem blisko i domyślam się, że muszę użyć jego nowej wtyczki o nazwie BBQ: http://benalman.com/projects/jquery-bbq-plugin/ - która jest dla 1.4 jquery i używam 1.6.4 - i Używam tego adresu URL (? Action = expand;) Mój jquery będzie: http://jsfiddle.net/RVCyu/ - Wydaje się nie działać – MLM

+0

Zobacz http://www.netlobo.com/url_query_string_javascript.html lub http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html. – jtfairbank

+0

Nie próbuję czytać wartości, staram się je modyfikować/dodawać – MLM

0
<script type="text/javascript"> 
    $(document).ready(function() { 
     $('input.letter').click(function() { 
      //0- prepare values 
      var qsTargeted = 'letter=' + this.value; //"letter=A"; 
      var windowUrl = ''; 
      var qskey = qsTargeted.split('=')[0]; 
      var qsvalue = qsTargeted.split('=')[1]; 
      //1- get row url 
      var originalURL = window.location.href; 
      //2- get query string part, and url 
      if (originalURL.split('?').length > 1) //qs is exists 
      { 
       windowUrl = originalURL.split('?')[0]; 
       var qs = originalURL.split('?')[1]; 
       //3- get list of query strings 
       var qsArray = qs.split('&'); 
       var flag = false; 
       //4- try to find query string key 
       for (var i = 0; i < qsArray.length; i++) { 
        if (qsArray[i].split('=').length > 0) { 
         if (qskey == qsArray[i].split('=')[0]) { 
          //exists key 
          qsArray[i] = qskey + '=' + qsvalue; 
          flag = true; 
          break; 
         } 
        } 
       } 
       if (!flag)// //5- if exists modify,else add 
       { 
        qsArray.push(qsTargeted); 
       } 
       var finalQs = qsArray.join('&'); 
       //6- prepare final url 
       window.location = windowUrl + '?' + finalQs; 
      } 
      else { 
       //6- prepare final url 
       //add query string 
       window.location = originalURL + '?' + qsTargeted; 
      } 
     }) 
    }); 
</script> 
Powiązane problemy