Javascript jquery索引替换

Javascript jquery索引替换,javascript,jquery,Javascript,Jquery,这里有一个隐藏的输入字段 <input type="hidden" value="php,php mysql" id="tags"/> 我还有一个普通的输入框,用户可以在其中添加他们的新标签,现在我想检查用户想要添加的新标签是否已经为他添加,如果已经添加,则发出警报(“已经存在”) 这是我的密码: var already_added = $('#tags_final').val().toLowerCase(); new_tag = new_tag.toLowerCase();

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

<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');
}
var ready_added=$('#tags_final').val().toLowerCase();
new_tag=new_tag.toLowerCase();
if(已添加索引of(新标记)<0){
//加上它,一切都好
}否则{
警报(“已经存在”);
}
上面的方法对于普通值很有效,例如,现在如果我尝试添加“php”,这将发出警报(“已经存在”),问题是,如果我添加“mysql”,这也会发送警报,因为它在“php mysql”中找到了它,但是“mysql”是另一个标记,需要添加。对此,我想到了什么解决方案


感谢您的帮助

我认为直接在字符串上使用
indexOf
比正则表达式或拆分为数组都要快(在依赖时更是如此)

只需将已添加的标记字符串用逗号括起来,然后在使用
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');
}
var已经添加=','+$('#tags_final').val().toLowerCase()+',';
new_tag=new_tag.toLowerCase();
如果(已添加.indexOf(','+新标记+',')<0){
//加上
}否则{
警报(“已经存在”);
}

我是从中得到这个想法的。

我认为直接在字符串上使用
indexOf
比正则表达式或拆分为数组都要快(在依赖时更是如此)

只需将已添加的标记字符串用逗号括起来,然后在使用
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');
}
var已经添加=','+$('#tags_final').val().toLowerCase()+',';
new_tag=new_tag.toLowerCase();
如果(已添加.indexOf(','+新标记+',')<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');
}
var ready_added=$('#tags_final').val().toLowerCase();
new_tag=new_tag.toLowerCase();
如果(已添加.indexOf(“[”+新标签+“]”)小于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');
}
var ready_added=$('#tags_final').val().toLowerCase();
new_tag=new_tag.toLowerCase();
如果(已添加.indexOf(“[”+新标签+“]”)小于0){
//加上它,一切都好
}否则{
警报(“已经存在”);
}

我认为您应该将其分解为不同的部分,并对实际标记本身执行全文比较

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();
如果($.inArray(新标签,标签)<0){
//加上
}否则{
警报(“已经存在”);
}

var tags=$('#tags_final').val().toLowerCase().split(',');
new_tag=new_tag.toLowerCase();
if(标签索引of(新标签)<0){
//加上
}否则{
警报(“已经存在”);
}


编辑:由@nybbler提供,使用他的评论中链接的jquery inArray方法,这将更加准确。

我认为您应该将其分解为单独的部分,并对实际标记本身进行全文比较

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();
如果($.inArray(新标签,标签)<0){
//加上
}否则{
警报(“已经存在”);
}

var tags=$('#tags_final').val().toLowerCase().split(',');
new_tag=new_tag.toLowerCase();
if(标签索引of(新标签)<0){
//加上
}否则{
警报(“已经存在”);
}


编辑:由@nybbler提供,使用他评论中链接的jquery inArray方法会更准确。

您可以使用这样的函数在逗号分隔的键串中查找键:

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

演示:

您可以使用如下函数在逗号分隔的键字符串中查找键:

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

演示:

您可以将整个值字符串拆分为一个数组(使用“,”vlaue进行拆分),然后检查数组中的每个元素以获得准确的值tag@LondonDrugs_MediaServices
indexOf()
也适用于数组。@JosephSilber IE获取。您可以将整个值字符串拆分为一个数组(使用“,”符拆分),然后检查数组中的每个元素以获得精确的tag@LondonDrugs_MediaServices
indexOf()
也适用于数组。@JosephSilber IE GET。由于这里使用jQuery,您应该使用jQuery的inArray()而不是Array.indexOf,因为它在IE中不可用9@nybbler:谢谢你。我以前从未遇到过这种方法(我不经常以这种方式遍历数组)。我将发布一个反映该信息的更新。由于jQuery在这里使用,您应该使用jQuery的inArray()而不是Array.indexOf,因为它在IE中不可用9@nybbler:谢谢你。我以前从未遇到过这种方法(我不经常以这种方式遍历数组)。我将发布一个反映这条信息的更新。@ZaheerAhmed-我没有遵循你的逻辑;请看我答案中的第一行代码。@JosephSilber使用string.indexOf可能获得的性能增益将被所需的字符串连接所抵消。看到这个jsPerf测试()显示Array.indexOf或jQuerys$.inArray是最快的,而这个解决方案是最慢的(在Chrome22、IE9和FF11中测试)@nybbler-我站得住脚了,尽管我仍然不明白简单的串联怎么会比
拆分
@ZaheerAhmed更昂贵-我没有遵循你的逻辑;请看我答案中的第一行代码。@JosephSilber使用string.indexOf可能获得的性能增益将被所需的字符串连接所抵消。请参阅这个jsPerf测试(),它显示Array.indexOf或jQuerys$.inArray是最快的,而这个解决方案是最慢的(te)