我有一个脚本可以添加点击元素的值。但是 - 我想在点击时将值替换为新值。
示例:
<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
答案 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];