2011-12-19 62 views
1

我正在研究一個應用程序,您可以單擊用戶名將其添加到回覆列表中。 如果用戶名已被添加,則不會再次添加用戶名。 我遇到的問題是,如果添加了用戶@assassin,並且我嘗試添加用戶@ass,它會發現@ ass-assin,並認爲@ass已被添加。 這裏是我的代碼:jQuery檢查字符串是否包含文字

$('#mentions a.mention_user').live('click', function(e){if($('textarea#message').val().toLowerCase().search('@'+$(this).text().toLowerCase()) < 0){ 
     $('textarea#message').val('@'+$(this).text()+' '+$('textarea#message').val()); 
    } 
    e.preventDefault(); 
}); 

在此先感謝!

編輯:它會針對被匹配的用戶名文本將類似於此:@user @joe @adam這是一個消息@someone

+0

你需要做一個「全字」或「全名」搜索,所以你不符合任何部分匹配。由於我們不知道您搜索的數據是什麼樣子,因此推薦最佳方式很難。 – jfriend00 2011-12-19 02:29:27

+0

@ jfriend00完成。 – skimberk1 2011-12-19 02:43:37

+0

你不需要將答案複製到你的問題中:一旦你接受了答案,它總是立即出現在問題後面。 – nnnnnn 2011-12-19 03:03:51

回答

1

假設空格字符是用戶名是非法的。 將textarea消息字符串拆分成由空格分隔的數組,並根據提出的用戶名檢查每個數組元素。

$('#mentions a.mention_user').live('click', function(e) { 
    if ($.inArray('@'+$(this).text(),$('textarea#message').val().split(' '))) { 
     $('textarea#message').val('@'+$(this).text()+' '+$('textarea#message').val()); 
    } 
    e.preventDefault(); 
}); 
+0

太棒了,效果很好。儘管你做了2個小錯誤。正確的版本添加到問題。 – skimberk1 2011-12-19 02:53:16

+0

酷 - 我編輯我的答案以顯示正確的版本。 – 2011-12-19 02:55:49

0

比較被添加到長度的項目長度該項目匹配。如果長度相同,則添加的項目已經存在。

+0

長度總是相同的,因爲我只會測量匹配項目的長度。 希望是有道理的。 – skimberk1 2011-12-19 02:26:44

0

位硬不完整的代碼來測試,但通過正則表達式搜索,並確保它有一個字符不包括AZ,az,0-9(以及任何其他有效的用戶名字符)後,可能會做的招。

喜歡的東西:

$('#mentions a.mention_user').live('click', function(e){if(($('textarea#message').val().toLowerCase() + ' ').search(
    new RegExp("'@'+$(this).text().toLowerCase() + '[^A-Za-z0-9\-_]') 
) < 0){ 
     $('textarea#message').val('@'+$(this).text()+' '+$('textarea#message').val()); 
    } 
    e.preventDefault(); 
}); 
+0

感謝您的回答,我會對其進行測試。 – skimberk1 2011-12-19 02:29:33

+1

另一種更容易的方式是使用分隔符進行搜索 - 例如搜索「@assassin」或「@assassin」或「@assassin;」。顯然,只有當你有一個一致的分​​隔符時纔有效,並且在搜索之前將一個附加到源字符串。 – SpoonNZ 2011-12-19 02:29:38

+0

我想過,但如果它是最後一個用戶名,並且之後沒有任何內容,則不起作用。 – skimberk1 2011-12-19 02:38:26

0

假設分離始終是一個空格字符,你可以這樣做:

$('#mentions a.mention_user').live('click', function(e){ 
    var taMsg = $('#message'), 
     userName = '@'+$(this).text()+' '; 
    if((taMsg.val().toLowerCase() + ' ').indexOf(userName) != -1) { 
     taMsg.val(userName + taMsg.val()); 
    } 
    e.preventDefault(); 
}); 

的想法是,如果你添加一個空格,以用戶名的列表的末尾,那麼你可以搜索它對於特定用戶名後面有一個空格。

我還更新了代碼緩存jQuery對象的消息文本區域,而不是重複了三遍。請注意,如果您選擇的是像'#message'這樣的ID,那麼(因爲該ID是唯一的),您不需要'textarea'前綴。

此外,因爲你實際上沒有使用正則表達式我已經切換到.indexOf()而不是.search()

相關問題