jquery indexOf替换

时间:2012-11-14 19:37:37

标签: javascript jquery

这里我有一个隐藏的输入字段

<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”是另一个标签,它需要添加。我想到了什么解决方案?

感谢您的帮助

4 个答案:

答案 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;
}

演示:http://jsfiddle.net/Guffa/UHH9V/