Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery测试url是否已包含参数_Javascript_Jquery_Url Rewriting - Fatal编程技术网

Javascript Jquery测试url是否已包含参数

Javascript 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。问题是,如果我多次单击(此筛选器在所

我知道这方面有很多问题,但我没有找到我真正需要的

这是我的js

$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。这样,您就不必担心难以测试的情况,即更换时出现问题,客户机进入不良状态