2012-11-25 1 views
5

ho ottenuto un URL simile a questo:jquery modificare url ottenere parametri

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

So ottenuto di modificare solo uno dei params GET come questo: (c è "h" al posto di "d")

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

e reindirizzare al nuovo URL. Tutti gli altri parametri GET dovrebbero rimanere gli stessi.

Come faccio a farlo?

risposta

9

Sono d'accordo che è meglio usare una biblioteca per questo scopo come menzionato in altre risposte.

Tuttavia, qui è una soluzione di sostituzione di stringhe basata su espressioni regolari se è necessaria una soluzione rapida più semplice.

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

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

Qui sto sostituendo la stringa di query chiave 'z' con 'newVlaue'

Date un'occhiata a questo violino: http://jsfiddle.net/BuddhiP/PkNsx

+1

'/ ([? &] z) = ([^ # &]*)/g; 'deve essere usato invece di'/([? &] Z) = ([^ &]*)/g;', perché altrimenti potrebbe sovrascrivere il frammento. – Zulakis

+0

@Zulakis Buon punto, post aggiornato. :) – BuddhiP

+0

Soluzione breve e buona :) –

1

come indicato window.location.search fornirà la stringa di query con ? inclusa.

Vorrei quindi trasformarli in un oggetto (magari con una libreria come http://github.com/medialize/URI.js) per semplificare il lavoro con i parametri. come var params = { key: value, key1: value1}

È quindi possibile modificare il valore desiderato e convertire le coppie di valori chiave in una stringa di query.

Dopo questo è possibile utilizzare window.location per spostare l'utente alla pagina successiva.

0

Ho messo insieme un metodo molto semplice, ma funziona solo con quello che stai cercando di raggiungere:

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

Si può provare qualcosa di simile:

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

Un po ' La caratteristica nota di PHP è che un'ultima denominazione di un parametro esistente sovrascrive la precedente.

Con questa conoscenza a portata di mano, si può semplicemente effettuare le seguenti operazioni:

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

facile.

+0

non fa questo portare a problemi se v'è un frammento in uso? (Ad esempio, 'http: //esempio.org/file? Param1 = valore1 # abc & c = h' è un URL non valido. – Zulakis

+0

Indica anche un URL non valido se prima non si utilizza alcuna stringa di query. Esempio:' http: // example.org/file.php & c = h' è un URL non valido – Zulakis

+0

@Zulakis Vero, devi essere più intelligente con il modo in cui questo è fatto. – Christian

0

Dal momento che il parametro può essere in qualsiasi luogo. Quindi questo funzionerà bene

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;

Sostituire location.search dai vostri nuovi argomenti come "? Foo = bar & tic tac ="

0

Set o aggiornare un URL/Parametro QueryString e aggiorna l'URL utilizzando la cronologia HTML.replaceState()

si può provare qualcosa di simile:

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