这里我有一个隐藏的输入字段
<input type="hidden" value="php,php mysql" id="tags"/>
我还有一个普通的输入框,用户可以添加他们的新标签,现在我想检查是否已经为他添加了用户想要添加的新标签,如果已添加,则警告('已经'有');
这是我的代码:
var already_added = $('#tags_final').val().toLowerCase();
new_tag = new_tag.toLowerCase();
if (already_added.indexOf(new_tag) < 0){
// add it, everything is OK
}else{
alert('already there');
}
上面的工作正常值正常,例如现在,如果我尝试添加“php”,这将提醒('已经存在'),问题是,如果我添加“mysql”,这也发送警告,因为它在“php mysql”中找到它,但“mysql”是另一个标签,它需要添加。我想到了什么解决方案?
感谢您的帮助
答案 0 :(得分:5)
我认为你想把它分成不同的部分并对实际标签本身进行全文比较。
var tags = $('#tags_final').val().toLowerCase().split(',');
new_tag = new_tag.toLowerCase();
if ($.inArray(new_tag, tags) < 0) {
// add it
} else {
alert('already there');
}
<击> 撞击>
<击>var tags = $('#tags_final').val().toLowerCase().split(',');
new_tag = new_tag.toLowerCase();
if (tags.indexOf(new_tag) < 0) {
// add it
} else {
alert('already there');
}
击> <击> 撞击>
编辑:由@nybbler提供,使用在他的评论中链接的jquery inArray方法会更准确。
答案 1 :(得分:1)
我认为直接在字符串上使用indexOf
比正则表达式或分割成数组更快(当依赖$.inArray
时更是如此)。
只需用逗号包装already_added
标记字符串,然后在使用indexOf
搜索标记时对标记执行相同操作:
var already_added = ',' + $('#tags_final').val().toLowerCase() + ',';
new_tag = new_tag.toLowerCase();
if (already_added.indexOf(',' + new_tag + ',') < 0) {
// add it
} else {
alert('already there');
}
我从a similar trick used by jQuery得到了这个想法。
答案 2 :(得分:0)
在大括号之间保存标签[php] [php mysql] 并搜索它
var already_added = $('#tags_final').val().toLowerCase();
new_tag = new_tag.toLowerCase();
if (already_added.indexOf("["+new_tag+"]") < 0){
// add it, everything is OK
}else{
alert('already there');
}
答案 3 :(得分:0)
您可以使用这样的函数在逗号分隔的键字符串中查找键:
function contains(keys, key) {
var i = 0, k = key.length;
for (var i = 0;(i = keys.indexOf(key, i)) != -1; i += k) {
if ((i == 0 || keys.charAt(i - 1) == ',') && (i + k == keys.length || keys.charAt(i + k) == ',')) {
return true;
}
}
return false;
}