我正在开发一个应用程序,您可以单击用户名将其添加到回复列表中。 如果已添加用户名,则不会再次添加用户名。 我遇到的问题是如果添加了用户@assassin,并且我尝试添加用户@ass,它会发现@ ass-assin并认为已经添加了@ass。 这是我的代码:
$('#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 :(得分:2)
假设空格字符对于用户名是非法的。 将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();
});
答案 1 :(得分:0)
将要添加的项目的长度与匹配的项目的长度进行比较。如果长度相等,则添加的项目已经存在。
答案 2 :(得分: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();
});
答案 3 :(得分: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();
});
这个想法是,如果你在用户名列表的末尾添加一个空格,那么你可以在它之后搜索一个带有空格的特定用户名。
我还更新了代码以缓存消息textarea的jQuery对象,而不是重复三次。请注意,如果您选择的ID为'#message',那么(假设该ID是唯一的)您不需要'textarea'前缀。
此外,由于您实际上并未使用正则表达式,因此我已切换为.indexOf()
而不是.search()
。