javascript
  • jquery
  • url-rewriting
  • 2013-02-25 53 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每當有人改變一個類別。這樣,您就不必擔心難以測試替換和客戶端進入錯誤狀態時出現問題的情況。

    相關問題