2016-02-25 2 views
1

У меня возникает проблема с удалением массивов строк запроса из URL.Как удалить строки строки запроса из url в javascript

Это мой URL -

В Chrome отображается в данном формате -

Var url = "http://mywebsite.com/innovation?agenda%5B%5D=4995&agenda%5B%5D=4993#ideaResult"; 

Принимая во внимание, в Mozilla он отображается в этом формате -

http://mywebsite.com/innovation?agenda[]=4995&agenda[]=4993#ideaResult 

Я хочу удалите конкретный параметр запроса.

Предположим, что я хочу, чтобы удалить "4995", то окончательный URL должен должен быть, как this-

http://mywebsite.com/innovation?agenda[]=4993#ideaResult 

Пожалуйста, помогите.

+0

Можете ли вы изменить код, в котором создается URL? –

+0

Я хочу удалить его динамически при нажатии кнопки, для обычных запросов, которые я могу сделать, но не для таких типов запросов, которые находятся в форматах массивов. – sajalsuraj

ответ

1
function removeArrayParam(key, value, sourceURL) { 
    var rtn = sourceURL.split("?")[0], 
     param, 
     params_arr = [], 
     queryString = (sourceURL.indexOf("?") !== -1) ? sourceURL.split("?")[1] : ""; 
    if (queryString !== "") { 
     params_arr = queryString.split("&"); 
     for (var i = params_arr.length - 1; i >= 0; i -= 1) { 
      param = params_arr[i].split("[]=")[0]; 
      paramValue = params_arr[i].split("[]=")[1]; 
      if (param === key && paramValue === value) { 
       params_arr.splice(i, 1); 
      } 
     } 
     if(params_arr.length) { 
     rtn = rtn + "?" + params_arr.join("&"); 
     } 
    } 
    return rtn; 
} 

Эта функция даст вам желаемый результат. Просто передайте ключ, значение и URL-адрес hashless.

var url = window.location.href; 
var hash = window.location.hash; 
var index_of_hash = url.indexOf(hash) || url.length; 
var hashless_url = url.substr(0, index_of_hash); 
var desired_url = removeArrayParam(key, value, unescape(hashless_url)); 
+0

Работал как шарм .. – sajalsuraj

0

около replace() функция?

var url = " http://mywebsite.com/innovation?agenda[]=4995&agenda[]=4993#ideaResult"; 

url = url.replace('agenda%5B%5D=4995&', '') 
url = url.replace('agenda[]=4995&', '') 
+0

Дайте мне одно решение, которое будет работать с обоими случаями[email protected] – sajalsuraj

+0

раскол и соединение на самом деле работает быстрее :) – Sojtin

+0

@sajalsuraj это решение работает как для firefox, так и для хром :) – Gintoki

1

Вы можете декодировать URL, чтобы согласовать

т.е..

var url = decodeURI("http://mywebsite.com/innovation?agenda%5B%5D=4995&agenda%5B%5D=4993#ideaResult"); 

.... а затем разделите строку и удалите строку запроса. Theres пример в этом вопросе здесь Remove querystring from URL

1

decodeURI() функции согласно Mozilla document:

Заменяет каждую управляющую последовательность в кодированном URI с характером , что он представляет

Таким образом, вы можете использовать это, как показано ниже:

decodeURI(window.location).replace(/agenda\[\]=4995&?/,'') 
0

искал возрасты для не-плагина решения удаления массивов и не-массивов из строки запроса, а затем повторно добавлять. Это может быть немного более элегантно, но это очень хорошо работает со всеми моими тестовыми примерами.

function removeURLParameter(param, url) { 
    url = decodeURI(url).split("?"); 
    path = url.length == 1 ? "" : url[1]; 
    path = path.replace(new RegExp("&?"+param+"\\[\\d*\\]=[\\w]+", "g"), ""); 
    path = path.replace(new RegExp("&?"+param+"=[\\w]+", "g"), ""); 
    path = path.replace(/^&/, ""); 
    return url[0] + (path.length 
     ? "?" + path 
     : ""); 
} 

function addURLParameter(param, val, url) { 
    if(typeof val === "object") { 
     // recursively add in array structure 
     if(val.length) { 
      return addURLParameter(
       param + "[]", 
       val.splice(-1, 1)[0], 
       addURLParameter(param, val, url) 
      ) 
     } else { 
      return url; 
     } 
    } else { 
     url = decodeURI(url).split("?"); 
     path = url.length == 1 ? "" : url[1]; 
     path += path.length 
      ? "&" 
      : ""; 
     path += decodeURI(param + "=" + val); 
     return url[0] + "?" + path; 
    } 
} 

Как использовать:

url = location.href; 
    -> http://example.com/?tags[]=single&tags[]=promo&sold=1 

url = removeURLParameter("sold", url) 
    -> http://example.com/?tags[]=single&tags[]=promo 

url = removeURLParameter("tags", url) 
    -> http://example.com/ 

url = addURLParameter("tags", ["single", "promo"], url) 
    -> http://example.com/?tags[]=single&tags[]=promo 

url = addURLParameter("sold", 1, url) 
    -> http://example.com/?tags[]=single&tags[]=promo&sold=1 

Конечно, обновить параметр, просто удалить, то добавить. Не стесняйтесь делать для него фиктивную функцию.