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