Javascript Jquery测试url是否已包含参数
我知道这方面有很多问题,但我没有找到我真正需要的 这是我的jsJavascript Jquery测试url是否已包含参数,javascript,jquery,url-rewriting,Javascript,Jquery,Url Rewriting,我知道这方面有很多问题,但我没有找到我真正需要的 这是我的js $j('.showCategory li a').each(function() { var catId = $j(this).attr("data-id"); this.href += (/\?/.test(this.href) ? '&' : '?') + 'filter_category='+ catId; }); 这很好用,因为它可以用我想要的参数生成我的url。问题是,如果我多次单击(此筛选器在所
$j('.showCategory li a').each(function() {
var catId = $j(this).attr("data-id");
this.href += (/\?/.test(this.href) ? '&' : '?') + 'filter_category='+ catId;
});
这很好用,因为它可以用我想要的参数生成我的url。问题是,如果我多次单击(此筛选器在所有页面上都可用),它会反复添加相同的参数,生成如下url:
我试图通过添加一个条件来解决这个问题,比如
$j('.showCategory li a').each(function() {
if(this.href.indexOf('filter_category') == -1) {
var catId = $j(this).attr("data-id");
this.href += (/\?/.test(this.href) ? '&' : '?') + 'filter_category='+ catId;
} else {
????
}
});
但在这种情况下,它不会添加任何参数,但不会替换值。如何解决此问题?使用此模式使用正则表达式进行就地替换:
} else {
this.href = this.href.replace(/filter_duration=(.+?)(&|$.*)()/, "filter_duration=" + catId + "$2"
}
这将使用捕获组查找现有的筛选器元素查询参数,并用新值(在本例中为catId)替换现有值。无论它是否是字符串中的最后一个查询参数,这都应该有效
这就是说,我不认为这个解决方案是最优的,您最好将url中想要的值存储在客户端javascript对象中,然后在每次有人更改类别时从头开始重建url。这样,您就不必担心难以测试的情况,即更换时出现问题,客户机进入不良状态