javascript
  • jquery
  • url-rewriting
  • 2013-02-25 49 views 2 likes 
    2

    我知道有很多关于这个问题,但我没有发现正是我需要jQuery的测试,如果一个网址已经包含一个参数

    这是JS我有

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

    该作品伟大的,因为它与我想要的参数生成我的网址。问题是,如果我点击多次(此过滤器可在所有页),它是一遍又一遍地将相同的参数,生成这样一个网址:

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

    但在这种情况下,它不会添加任何参数,但它不会取代该值。我该如何解决这个问题?

    回答

    2

    使用这个模式做一个就地更换用正则表达式:

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

    它使用捕捉组来查找现有filter_duration元素的查询参数,并在适当位置用一个新值替换现有值(在这种情况下catId)。无论它是否是字符串中的最后一个查询参数,这都应该起作用。

    这就是说,我不会认为这个解决方案是最优的,你可能会更好地将你想要的值存储在客户端JavaScript对象的url中,然后每次从头开始重建url每当有人改变一个类别。这样,您就不必担心难以测试替换和客户端进入错误状态时出现问题的情况。

    相关问题