正确使用javascript切换查询字符串参数

时间:2014-01-14 12:31:08

标签: javascript jquery

我遇到了以下问题。

我必须为我的网站制作一个菜单(比如booking.com左侧过滤菜单),我正在使用javascript来做到这一点。

我遇到的问题是,在以下代码行中

 <ol class="select">
     <li data-value="date">Data</li>
     <li data-value="rank">Popolarit&agrave;</li>
 </ol>

var nav = $('#nav');
var selection = $('.select');
var select = selection.find('li');

select.click(function(event) {
    $(window.location).attr('href', document.location.href+"?ord=" + $(this).attr('data-value'));
});

当我点击“日期”时一切正常,网址变化正常,但当我点击“排名”时,网址成为第一个ord +第二个ord

我想这样做:

我想要,如果我的url是url.php它变成了url.php?参数,但是如果我进入url.php?参数并且我点击另一个li标签,则url变为url.php?secondparameter所以首先是切割,第二个是更换。

我该怎么做?

非常感谢,

亚历

4 个答案:

答案 0 :(得分:0)

问题是你的document.location.href已经包含了之前选择的数据。在添加新参数之前,您必须删除旧参数。

而不是使用

document.location.href

你应该使用

var old_url = document.location.href;
var url = old_url.substring(0, old_url.indexOf('?'));

如果你这样做:

window.location = url +"?ord=" + $(this).attr('data-value');

在添加新的ord之前,将从网址中删除之前的ord。

答案 1 :(得分:0)

以下这些对您有用吗?

select.click(function(event) {
    window.location = '?ord='+$(this).data('value');
});

最好只修改window.location.search

select.click(function(event) {
    window.location.search = '?ord='+$(this).data('value');
});

答案 2 :(得分:0)

您只需修改document.location.search;只包含URL的查询部分。

答案 3 :(得分:0)

您正在尝试更改查询字符串,为什么不像这样覆盖查询字符串:

window.location.search = "?ord=" + $(this).attr('data-value');