2016-01-25 4 views
5

У меня есть скрипт, который добавляет значение из щелкнутого элемента. Однако - я хотел бы заменить значение новым при нажатии.Замените параметр url динамически

Пример:

<ul class="acfilter"> 
<li><a href="reset">reset</a></li> 
<li><a href="One">One</a></li> 
<li><a href="Two">Two</a></li> 
</ul> 

Script

$(document).ready(function() { 
    $('ul.acfilter li a').on('click', function(e) { 
     e.preventDefault(); 
     if ($(this).attr('href') != "reset") { 
      if (location.href.indexOf('?') === -1) { 
       location.href = location.href + "?fss=" + $(this).attr('href'); 
      } else { 
       location.href = location.href + "+" + $(this).attr('href'); 
      } 
     } else { 
      location.href = location.origin + location.pathname; 
     } 
    }); 
}); 

Первый параметр OnClick дает ?fss=one и на второй клик вы получите? fss=one+two. Ссылка сброса очищает его.

Однако - я хотел бы заменить «одно» значение на «два» значения на клик. Значение динамическое - поэтому я не могу просто сделать If/Else url.replace с известным значением.

Как это сделать?

Edit:

Забыл упомянуть, что могут быть и другие параметры в URL. Пример:

Первый щелчок дает

?fss=one 

и тому при выполнении действия, которое дает другой параметр я упоминаю это дает следующее:

?param=list&fss=one 

, который является правильным с помощью сценария от пользователя brijesh chowdary lavu. Параметр = список - это параметр, который всегда должен быть первым и написан для этого и изменяется от списка к крупному списку, это также работает с этим скриптом.

Проблема, когда я нажимаю на моем конкретном классе во второй раз - вместо того, чтобы идти от

?param=list&fss=one 

в

?param=list&fss=two 

заменяет все, чтобы

?fss=one 
+2

попробовать эту anwers Http: // StackOverflow.com/questions/5999118/add-or-update-query-string-parameter – gurvinder372

ответ

0

Попробуйте это.

$('ul.acfilter li a').on('click', function(e) { 
    e.preventDefault(); 
    if ($(this).attr('href') != "reset") { 
     if (location.href.indexOf('?') === -1) { 
      location.href = location.href + "?fss=" + $(this).attr('href'); 
     } else { 
      location.href = location.origin + location.pathname + "?fss=" + $(this).attr('href'); 
     } 
    } else { 
     location.href = location.origin + location.pathname; 
    } 
}); 

Или с помощью простых строковых методов, вы можете добавить функцию в сценарий, как показано ниже, так что другие параметры не должны измениться:

$(document).ready(function() { 
$('ul.acfilter li a').on('click', function(e) { 
    e.preventDefault(); 
    if ($(this).attr('href') != "reset") { 
     if (location.href.indexOf('?') === -1) { 
      location.href = location.href + "?fss=" + $(this).attr('href'); 
     } else { 
      location.href = changeParameter(window.location.toString(),"fss",$(this).attr('href')); 
     } 
    } else { 
     location.href = location.origin + location.pathname; 
    } 
}); 

}); 
    function changeParameter(str,par,val) 
    { 
      var t1 = str.indexOf(par); 
      var t3 = t1+par.length+1; 
      var t2= str.indexOf("&",t3); 
      if(t2==-1) 
      { 
       return str.substring(0,t3)+val; 
      } 
      else 
      { 
       return str.substring(0,t3)+val+str.substring(t2); 
      } 
    } 
+0

ну, может быть, но, конечно, не общее решение, так как это не сработает, если бы он был? fss = one & foo = bar – Gavriel

+0

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

+0

Хм, вторая часть, похоже, не работает - это дало мне URL-адрес/httone, когда присутствовал другой параметр. – user3344734

0

Вам необходимо отслеживать параметр fss (а не значение) и все время заменяйте его значение.

Наилучший способ для этого - split от fss.

//Lets split the href by the param fss 
var urlParts = location.href.split("fss"); 

//Insert your new value together with the param. (split removes the param) 
if (location.href.indexOf("?") < 0) 
    location.href = urlParts[0] + "?fss=" + $(this).attr('href'); 
else  
    location.href = urlParts[0] + "fss=" + $(this).attr('href'); 

И для сброса

location.href = location.href.split("fss")[0]; 
+0

Привет, Чарли и спасибо за ответ. Тем не менее - я, похоже, не могу заставить эту работу работать, не могли бы вы показать мне, как написать ее для работы с моим вариантом сброса? – user3344734

+0

Извините, произошла ошибка. Ответ обновлен. 'split' создает массив из частей строки без разделителя (fss). Это теория здесь. –

Смежные вопросы