动态替换url参数

时间:2016-01-25 07:44:39

标签: javascript jquery

我有一个脚本可以添加点击元素的值。但是 - 我想在点击时将值替换为新值。

示例:

<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>

脚本

$(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。重置链接清除它。

然而 - 我想替换&#34;一个&#34;使用&#34;两个&#34;点击的价值。该值是动态的 - 所以我不能只使用已知值执行If / Else url.replace。

我该怎么做?

编辑:

忘记提及网址中可以有其他参数。示例:

首先点击

?fss=one 

当做一个给出我提到的其他参数的动作时,它给出了这个:

?param=list&fss=one 

使用来自用户brijesh chowdary lavu的脚本是正确的。 param = list是一个始终必须是第一个的参数,并且编写为执行此操作并从列表更改为largelist,这也适用于该脚本。

问题是当我第二次点击我的特定课程时 - 而不是从

开始
?param=list&fss=one 

?param=list&fss=two 

它取代了所有内容

?fss=one

2 个答案:

答案 0 :(得分: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);
            }
    }

答案 1 :(得分: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];