Javascript 动态替换url参数

Javascript 动态替换url参数,javascript,jquery,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>

我有一个脚本,可以添加单击元素的值。但是-单击时,我想用新值替换该值

例如:

<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>
第一个参数onclick给出
?fss=one
,第二个参数onclick给出
fss=one+two
。重置链接将清除它

但是-我想在单击时用“两”值替换“一”值。该值是动态的-因此我不能仅使用已知值替换If/Else url.replace

我该怎么做

编辑:

忘了提到url中可能还有其他参数。例如:

第一次点击给出

?fss=one 
当做一个动作,给出我提到的另一个参数时,它给出:

?param=list&fss=one 
使用来自用户brijesh chowdary lavu的脚本,这是正确的。param=list是一个参数,必须始终放在第一位,并为此编写,然后从list更改为largelist,这也适用于该脚本

问题是当我第二次点击我的特定类时——而不是从

?param=list&fss=one 

它取代了一切

?fss=one
试试这个

 $('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);
            }
    }

您需要跟踪您的参数fss(不是值),并始终替换它的值

最好的方法是从
fss
的角度进行
split

//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');

试试这些答案吧,也许吧,但肯定不是一个通用的解决方案,因为如果他有?fss=one&foo=barThis就不起作用了-但是如果我在url中有另一个参数,它就会失败-然后它也替换那个参数,而不是添加它-我只想替换指定类中的值。也许应该提到这种情况。嗯,第二部分似乎不起作用-当另一个参数存在时,它给了我一个/httone的url。缺少分号,请立即尝试!奇怪的是,它仍然给出了相同的结果。查理,谢谢你的回复。然而,我似乎无法让这个工作,你能告诉我如何写它与我的重置选项工作吗?对不起,有一个错误。答案已更新
split
使用不带分隔符(fss)的字符串部分创建一个数组。这就是这里的理论。
$(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);
            }
    }
//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];