2012-11-25 15 views
5

Mam URL tak:jQuery modyfikować url uzyskać parametry

http://google.de/test.php?a=b&c=d&e=f 

wiem dostał zmodyfikować tylko jeden z params GET jak ten: (c jest "h" zamiast "d")

http://google.de/test.php?a=b&c=h&e=f 

i przekieruj do nowego adresu URL. Wszystkie pozostałe parametry GET powinny pozostać takie same.

Jak mam to zrobić?

Odpowiedz

9

Zgadzam się, jak najlepiej korzystać z biblioteki w tym celu, jak wspomniano w innych odpowiedziach.

Jednak tutaj jest rozwiązanie zastępujące ciąg znaków oparte na wyrażeniach regularnych, jeśli potrzebujesz prostszej, szybkiej poprawki.

var url = "http://my.com/page?x=y&z=1&w=34"; 

var regEx = /([?&]z)=([^#&]*)/g; 
var newurl = url.replace(regEx, '$1=newValue'); 

Tutaj jestem zastępując ciąg kwerendy klawisz „Z” z „newVlaue”

Wystarczy popatrzeć na to ryba: http://jsfiddle.net/BuddhiP/PkNsx

+1

'/ ([? &] z) = ([^ # &]*)/g; 'musi być użyty zamiast'/([? &] Z) = ([^ &]*)/g; ', ponieważ może on zastąpić ten fragment – Zulakis

+0

@Zulakis Dobrze, po aktualizacji. :) – BuddhiP

+0

Krótkie i dobre rozwiązanie. :) –

1

jak wspomniano window.location.search poda ci ciąg zapytania z numerem ?.

Chciałbym przekształcić je w obiekt (być może z biblioteką podobną do http://github.com/medialize/URI.js), aby ułatwić pracę z parametrami. podobnie jak var params = { key: value, key1: value1}

Następnie można zmodyfikować żądaną wartość i przekonwertować pary wartości klucza z powrotem na ciąg zapytania.

Po tym można użyć window.location, aby przenieść użytkownika na następną stronę.

0

Mam ułożyła naprawdę prosty sposób, ale to będzie działać tylko z tego, co starasz się osiągnąć:

var url = 'http://google.de/test.php?a=b&c=d&e=f'; 
var gets = url.split('.php?'); 
var ge = gets[1].split('&'); 
var change = ge[1].split('='); 
var change[1] = 'h'; 
var newUrl = url[0] + '.php?' + ge[0] + '&' + change[0] + '=' + change[1] + '&' + ge[2]; 
0

Można spróbować czegoś takiego:

var changed = "h"; // you can vary this GET parameter 

var url = "http://google.de/test.php?a=b&e=f&c=" + changed; // append it to the end 

window.location = newurl; // redirect the user to the url 
1

Trochę znaną cechą PHP jest to, że późniejsze nazewnictwo istniejącego parametru zastępuje wcześniejsze.

Dzięki tej wiedzy w zasięgu ręki, wystarczy wykonać następujące czynności:

location.href = location.href + '&c=h'; 

Easy.

+0

Nie to prowadzić do problemów, jeśli nie jest to fragment jest wykorzystywany? (Na przykład: "http: //przykład.org/file? Param1 = wartość1 # abc & c = h" jest nieprawidłowym adresem URL: – Zulakis

+0

Prowadzi to również do nieprawidłowego adresu URL, jeśli wcześniej nie stosowano ciągu zapytań. Przykład: 'http: // example.org/file.php & c = h' jest nieprawidłowym adresem URL – Zulakis

+0

@ Zulakis Prawdą jest, że musisz być bardziej inteligentny w taki sposób. – Christian

0

Ponieważ parametr może być w dowolnym miejscu. Więc to będzie działać dobrze

url="http://google.de/test.php?a=b&c=d&e=f"; 
url=url.replace(/&c=.*&/,"&c=h&") 
-2

location.href = location.origin+location.pathname+location.search;

Wymień location.search przez nowych argumentów jak "? Foo = bar & tic tac ="

0

Set lub zaktualizować URL/QueryString Parameter i aktualizuj URL przy użyciu historii HTML.replaceState()

Można spróbować czegoś takiego:

var updateQueryStringParam = function (key, value) { 
    var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''), 
     urlQueryString = document.location.search, 
     newParam = key + '=' + value, 
     params = '?' + newParam; 

    // If the "search" string exists, then build params from it 
    if (urlQueryString) { 
     keyRegex = new RegExp('([\?&])' + key + '[^&]*'); 

     // If param exists already, update it 
     if (urlQueryString.match(keyRegex) !== null) { 
      params = urlQueryString.replace(keyRegex, "$1" + newParam); 
     } else { // Otherwise, add it to end of query string 
      params = urlQueryString + '&' + newParam; 
     } 
    } 
    window.history.replaceState({}, "", baseUrl + params); 
};