Обновление существующих значений URL-адресов с помощью jQuery
Скажем, у меня есть URL-адрес, например:
http://www.example.com/hello.png?w=100&h=100&bg=white
Что я хотел бы сделать, это обновить значения w и h querystring, но оставить bg querystring неповрежденными, например:
http://www.example.com/hello.png?w=200&h=200&bg=white
Итак, какой самый быстрый наиболее эффективный способ прочитать значения querystring (и они могут быть любым набором значений запроса, а не только w, h и bg), обновить несколько или ни одного из значений и вернуть полный URL-адрес с новой строкой?
Итак:
- Получить значения каждого ключа querystring
- Обновить любое количество клавиш
- Восстановить URL с новыми значениями
- Сохраняйте все другие значения, которые не были обновлены.
- У него не будет стандартного набора известных ключей, он может измениться на URL
Ответы
Ответ 1
Получить строку запроса значения и использовать $. param для восстановления строка запроса
UPDATE:
Это пример, также проверьте fiddle:
function getQueryVariable(url, variable) {
var query = url.substring(1);
var vars = query.split('&');
for (var i=0; i<vars.length; i++) {
var pair = vars[i].split('=');
if (pair[0] == variable) {
return pair[1];
}
}
return false;
}
var url = 'http://www.example.com/hello.png?w=100&h=100&bg=white';
var w = getQueryVariable(url, 'w');
var h = getQueryVariable(url, 'h');
var bg = getQueryVariable(url, 'bg');
// http://www.example.com/hello.png?w=200&h=200&bg=white
var params = { 'w':200, 'h':200, 'bg':bg };
var new_url = 'http://www.example.com/hello.png?' + jQuery.param(params);
Ответ 2
Другой способ (независимо от jQuery или других библиотек): https://github.com/Mikhus/jsurl
var u = new Url;
// or
var u = new Url('/some/path?foo=baz');
alert(u);
u.query.foo = 'bar';
alert(u);
Ответ 3
//update URL Parameter
function updateURL(key,val){
var url = window.location.href;
var reExp = new RegExp("[\?|\&]"+key + "=[0-9a-zA-Z\_\+\-\|\.\,\;]*");
if(reExp.test(url)) {
// update
var reExp = new RegExp("[\?&]" + key + "=([^&#]*)");
var delimiter = reExp.exec(url)[0].charAt(0);
url = url.replace(reExp, delimiter + key + "=" + val);
} else {
// add
var newParam = key + "=" + val;
if(!url.indexOf('?')){url += '?';}
if(url.indexOf('#') > -1){
var urlparts = url.split('#');
url = urlparts[0] + "&" + newParam + (urlparts[1] ? "#" +urlparts[1] : '');
} else {
url += "&" + newParam;
}
}
window.history.pushState(null, document.title, url);
}
Ответ 4
Мой URL-адрес выглядит следующим образом: http://localhost/dentistryindia/admin/hospital/add_procedure?hid=241&hpr_id=12
var reExp = /hpr_id=\\d+/;
var url = window.location.href;
url = url.toString();
var hrpid = $("#category :selected").val(); //new value to replace hpr_id
var reExp = new RegExp("[\\?&]" + 'hpr_id' + "=([^&#]*)"),
delimeter = reExp.exec(url)[0].charAt(0),
newUrl = url.replace(reExp, delimeter + 'hpr_id' + "=" + hrpid);
window.location.href = newUrl;
Вот как это сработало для меня.
Ответ 5
Другой способ, которым вы можете это сделать, используя простой код reg ex от Samuel Santos здесь:
/*
* queryParameters -> handles the query string parameters
* queryString -> the query string without the fist '?' character
* re -> the regular expression
* m -> holds the string matching the regular expression
*/
var queryParameters = {}, queryString = location.search.substring(1),
re = /([^&=]+)=([^&]*)/g, m;
// Creates a map with the query string parameters
while (m = re.exec(queryString)) {
queryParameters[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}
// Update w and h
queryParameters['w'] = 200;
queryParameters['h'] = 200;
Теперь вы можете создать новый URL-адрес:
var url = window.location.protocol + '//' + window.location.hostname + window.location.pathname;
// Build new Query String
var params = $.param(queryParameters);
if (params != '') {
url = url + '?' + params;
}
ИЛИ вы можете просто использовать параметры, чтобы заставить браузер перезагружать сразу:
location.search = params;
ИЛИ делайте все, что хотите, с помощью:)
Ответ 6
Вы можете сделать что-то вроде этого:
// If key exists updates the value
if (location.href.indexOf('key=') > -1) {
location.href = location.href.replace('key=current_val', 'key=new_val');
// If not, append
} else {
location.href = location.href + '&key=new_val';
}
Привет