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

256
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-сервиса

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

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

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

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

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

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

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

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

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

239