【问题标题】:Jquery Test if a url already contain a parameterJquery 测试一个 url 是否已经包含一个参数
【发布时间】:2013-02-10 22:18:18
【问题描述】:

我知道有很多关于这个的问题,但我没有找到我真正需要的东西

这是我的js

$j('.showCategory li a').each(function() {
    var catId = $j(this).attr("data-id");
    this.href += (/\?/.test(this.href) ? '&' : '?') + 'filter_category='+ catId;
});

这很好用,因为它使用我想要的参数生成我的 url。问题是,如果我点击多次(这个过滤器在所有页面上都可用),它会一遍又一遍地添加相同的参数,生成这样的 url:

http://www.blabla.com/search?search=cat&filter_duration=short&filter_duration=medium&filter_duration=long

我尝试通过添加类似的条件来解决此问题

$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 {
        ????
    }
});

但在这种情况下,它不会添加任何参数,但不会替换值。请问这个怎么解决?

【问题讨论】:

    标签: javascript jquery url-rewriting


    【解决方案1】:

    使用此模式使用正则表达式进行就地替换:

    } else {
    this.href = this.href.replace(/filter_duration=(.+?)(&|$.*)()/, "filter_duration=" + catId + "$2"
    }
    

    这使用捕获组来查找现有的 filter_duration 元素查询参数,并将现有值替换为新值(在本例中为 catId)。无论它是否是字符串中的最后一个查询参数,这都应该有效。

    也就是说,我不会将此解决方案视为最佳解决方案,您最好将您想要的值存储在客户端 javascript 对象中的 url 中,然后每次从头开始重建 url任何人都会更改类别。这样一来,您就不必担心替换出现问题以及客户端进入不良状态的难以测试的案例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-03
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2012-02-25
      • 1970-01-01
      相关资源
      最近更新 更多