подскажите как изменить функцию?

322
23 апреля 2017, 00:35

Это изменение GET параметров в url

Дело в том что при нажатии на name ulr = index?sort=name, а по нажатию на nums ulr = index?sort=nums, но нужно чтобы результат был таким ulr = index?sort=name&sort=nums

<a onclick="return setAttr('sort','name')">по name</a>
<a onclick="return setAttr('sort','nums')">по nums</a>
<script>
function setAttr(prmName,val){
    var res = '';
    var d = location.href.split("#")[0].split("?");
    var base = d[0];
    var query = d[1];
    if(query) {
        var params = query.split("&");
        for(var i = 0; i < params.length; i++) {
            var keyval = params[i].split("=");
            if(keyval[0] != prmName) {
                res += params[i] + '&';
            }
        }
    }
    res += prmName + '=' + val;
    window.history.pushState(null, null, base + '?' + res);
    return false;
}
</script>
Answer 1

Я в комментах ошибся немножко:

if(keyval[0] != prmName || keyval[1] != val) {
   res += params[i] + '&';
}

Fiddle

Можно добавить проверку наличия текущего значения и убирать его:

if(keyval[0] == prmName && keyval[1] == val) {
   exists = true;
} else ...

А потом проверять и не добавлять этот параметр.

Fiddle

Answer 2

Вот так можно попробовать:

function setAttr(prmName, val) { 
  var el = prmName + '=' + val; 
  var res = ''; 
  var d = location.href.split("#")[0].split("?"); 
  var base = d[0]; 
  var query = d[1]; 
 
  if (query) { 
    var params = query.split("&"); 
    for (var i = 0; i < params.length; i++) {       
      if (params.includes(el)) { 
        console.log('Значение уже содержится'); 
        //console.log(location.href); 
        return false; 
      }else{ 
        res += params[i] + '&'; 
      } 
    } 
  } 
  res += el; 
  window.history.pushState(null, null, base + '?' + res); 
  console.log(base + '?' + res); 
  return false; 
}
<a onclick="return setAttr('qsort','name')">qsort name</a> 
<a onclick="return setAttr('sort','name')">sort name</a> 
<a onclick="return setAttr('sort','nums')">sort nums</a>

В условии проверим наличие такого элемента с ключом и значением в массиве параметров params.

READ ALSO
Клиент для REST-сервиса

Клиент для REST-сервиса

Необходим работающий пример приложения - клиента REST-сервиса

377
Youtube API, как запросить все видео с канала?

Youtube API, как запросить все видео с канала?

Собственно как? Использую NodeJS, и библиотеку "request" https://github

648
Узнать на какой адрес xhr отправил запрос

Узнать на какой адрес xhr отправил запрос

ЗдравствуйтеВозможно ли узнать на какой адрес был отправлен запрос, не зная какой именно объект его отправляет? Да это можно посмотреть в консоли,...

309
Как обратится к массиву в динамической функции

Как обратится к массиву в динамической функции

Проблема в том что название (не массив!) массива передается в динамическую функцию и нужно из этого массива прочитать значенияФункция примерно...

295