Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用“indexOf”搜索字符串失败_Javascript_Jquery - Fatal编程技术网

Javascript 使用“indexOf”搜索字符串失败

Javascript 使用“indexOf”搜索字符串失败,javascript,jquery,Javascript,Jquery,我想显示消息存在!如果输入字段中的字符串包括li标记中的字符串 当我输入cccc时,存在!消息显示成功。但是,当我输入aaaa或bbbb时,它会失败并显示Nop!。我想知道为什么。我希望有人能帮助我 $'input'。在'input'上,函数{ var关键字=$this.val; var-targetText; var msg=$'msg'; 如果关键字!={ $ul li.每个函数{ targetText=$this.text; 如果targetText.indexOfkeyword!=-1

我想显示消息存在!如果输入字段中的字符串包括li标记中的字符串

当我输入cccc时,存在!消息显示成功。但是,当我输入aaaa或bbbb时,它会失败并显示Nop!。我想知道为什么。我希望有人能帮助我

$'input'。在'input'上,函数{ var关键字=$this.val; var-targetText; var msg=$'msg'; 如果关键字!={ $ul li.每个函数{ targetText=$this.text; 如果targetText.indexOfkeyword!=-1{ msg.text'Exist!'; }否则{ msg.text'Nop!'; } }; }否则{ msg.text; } }; AAAAA bbbbbbbbbb 中交
不要在循环中设置文本。每个,因为它在每次迭代中都被覆盖,这就是为什么只有最后一句ccccc有效,因为它是最后一次循环迭代,其他的都被覆盖

您可以使用一个标志变量来知道是否存在,然后在循环之后,检查这个布尔变量并基于它设置文本

看看这个例子:

$'input'。在'input'上,函数{ var关键字=$this.val; var-targetText; var msg=$'msg'; var=false; 如果关键字!={ $ul li.每个函数{ targetText=$this.text; 如果targetText.indexOfkeyword!=-1{ 存在=真; } }; 如果存在{ msg.text'Exist!'; }否则{ msg.text'Nop!'; } }否则{ msg.text; } }; AAAAA bbbbbbbbbb 中交
不要在循环中设置文本。每个,因为它在每次迭代中都被覆盖,这就是为什么只有最后一句ccccc有效,因为它是最后一次循环迭代,其他的都被覆盖

您可以使用一个标志变量来知道是否存在,然后在循环之后,检查这个布尔变量并基于它设置文本

看看这个例子:

$'input'。在'input'上,函数{ var关键字=$this.val; var-targetText; var msg=$'msg'; var=false; 如果关键字!={ $ul li.每个函数{ targetText=$this.text; 如果targetText.indexOfkeyword!=-1{ 存在=真; } }; 如果存在{ msg.text'Exist!'; }否则{ msg.text'Nop!'; } }否则{ msg.text; } }; AAAAA bbbbbbbbbb 中交
问题是因为您更新了每个循环中的文本。如果在按a键后按照逻辑进行操作,第一次迭代将找到包含AAAAA的li,并将文本更新为Exist!。然后,第二次迭代将a与bbbb进行比较并失败,并将文本设置为Nop!。与中交上一次迭代相同

要解决此问题,您可以改为使用:contains查找输入了文本的任何元素并显示消息:

var$msg=$'msg'; $'input'。在'input'上,函数{ var关键字=$this.val; var matches=$'ul li:包含“+关键字+”; $msg.textmatches.length?'Exist!':'Nop!'; }; AAAAA bbbbbbbbbb 中交
问题是因为您更新了每个循环中的文本。如果在按a键后按照逻辑进行操作,第一次迭代将找到包含AAAAA的li,并将文本更新为Exist!。然后,第二次迭代将a与bbbb进行比较并失败,并将文本设置为Nop!。与中交上一次迭代相同

要解决此问题,您可以改为使用:contains查找输入了文本的任何元素并显示消息:

var$msg=$'msg'; $'input'。在'input'上,函数{ var关键字=$this.val; var matches=$'ul li:包含“+关键字+”; $msg.textmatches.length?'Exist!':'Nop!'; }; AAAAA bbbbbbbbbb 中交 您可以使用Array.prototype.some方法在回调返回true时立即返回,然后根据是否有答案设置消息,例如如下所示:

$'input'。在'input'上,函数{ var关键字=$this.val; var msg=$'msg'; 如果关键字!={ var hasKeyword=Array.from$'ul li'.somefunction项{ return item.textContent.includes关键字; }; msg.texthasKeyword“存在”:“不存在”; }否则{ msg.text; } }; AAAAA bbbbbbbbbb 中交 您可以使用Array.prototype.some方法在回调返回true时立即返回,然后根据是否有答案设置消息,例如如下所示:

$'input'。在'input'上,函数{ var关键字=$this.val; var msg=$'msg'; 如果关键字!={ var hasKeyword=Array.from$'ul li'.somefunction项{ return item.textContent.includes关键字; }; msg.texthasKeyword“存在”:“不存在”; }否则{ msg.text; } }; AAAAA bbbbbbbbbb 中交
您正在遍历所有元素并检查每个元素。对于aaa,你有一个匹配项,所以你写下文本。然后转到下一个,但没有匹配项,因此将文本设置为“未找到”

因此,当找到匹配项时,需要退出循环。使用jQuery的每个 使用返回值为false

$'input'。在'input'上,函数{ var关键字=$this.val; var-targetText; var msg=$'msg'; 如果关键字!={ $ul li.每个函数{ targetText=$this.text; 如果targetText.indexOfkeyword!=-1{ msg.text'Exist!'; 返回错误 }否则{ msg.text'Nop!'; } }; }否则{ msg.text; } }; AAAAA bbbbbbbbbb 中交
您正在遍历所有元素并检查每个元素。对于aaa,你有一个匹配项,所以你写下文本。然后转到下一个,但没有匹配项,因此将文本设置为“未找到”

因此,当找到匹配项时,需要退出循环。对于jQuery的each,可以使用returnfalse

$'input'。在'input'上,函数{ var关键字=$this.val; var-targetText; var msg=$'msg'; 如果关键字!={ $ul li.每个函数{ targetText=$this.text; 如果targetText.indexOfkeyword!=-1{ msg.text'Exist!'; 返回错误 }否则{ msg.text'Nop!'; } }; }否则{ msg.text; } }; AAAAA bbbbbbbbbb 中交 此代码snip wii也适用于不区分大小写的

$'input'。在'input'上,函数{ var关键字=$this.val; var-targetText; var msg=$'msg'; 如果关键字!={ var matchfound=false $ul li.每个函数{ targetText=$this.text; 调试器; 如果关键字.trim&&targetText.toLocaleLowerCase.indexOfkeyword.toLocaleLowerCase>-1{ msg.text'Exist!'; matchfound=true; } }; 如果找到了{ msg.text'Nop!'; } }否则{ msg.text; } }; AAAAA bbbbbbbbbb 中交 此代码snip wii也适用于不区分大小写的

$'input'。在'input'上,函数{ var关键字=$this.val; var-targetText; var msg=$'msg'; 如果关键字!={ var matchfound=false $ul li.每个函数{ targetText=$this.text; 调试器; 如果关键字.trim&&targetText.toLocaleLowerCase.indexOfkeyword.toLocaleLowerCase>-1{ msg.text'Exist!'; matchfound=true; } }; 如果找到了{ msg.text'Nop!'; } }否则{ msg.text; } }; AAAAA bbbbbbbbbb 中交

因为它每次都会被覆盖,所以在循环之后,您可能只需要将文本更改为Exist或Nop一次。对于任何程序员来说,一项关键技能就是能够调试他们的代码。熟悉浏览器的开发工具,尤其是调试器,并在代码运行时逐步检查代码,以便查看每次迭代中发生的情况。put return false;在Exist msg之后。因为它每次都会被覆盖,所以在循环之后,您可能只需要将文本更改为Exist或Nop一次。对于任何程序员来说,一项关键技能就是能够调试他们的代码。熟悉浏览器的开发工具,尤其是调试器,并在代码运行时逐步检查代码,以便查看每次迭代中发生的情况。put return false;在包含选择器上的Exist msg.Nice之后,我猜他想要他的贪婪匹配,因为他使用的是indexOfTrue,我想我会添加这两个,以防万一。非常感谢您的解释。现在我明白了为什么只有最后一个列表起作用了。我也很感激你给我展示了另一个选择。在包含选择器上的选择很好,我想他想要他的贪婪匹配,因为他使用的是indexOfTrue,我想我会添加两个,以防万一。非常感谢你的解释。现在我明白了为什么只有最后一个列表起作用了。我也很感激你给我展示了另一个选择。不是投票人,但每个人都会贯穿所有人,即使你回来,事实上,在这种情况下,回来没有什么不同。啊,是的,这是正确的,尽管最终结果有争议吗???我用flag试过你的代码,效果很好!是的,它是有效的,但它并不是您上面接受的最佳性能解决方案。如果你认为这有帮助的话,你可以支持下一个选民,但每一个都会贯穿整个过程,即使你回来了,事实上,在这种情况下,返回并没有什么不同啊,是的,它是正确的,尽管最终结果是有争议的???我用flag试过你的代码,效果很好!是的,它是有效的,但它并不是您上面接受的最佳性能解决方案。如果你认为这有帮助,你可以向你的帮助倾注太多。现在我明白了发生了什么..正如你告诉我的,只有添加return false,我的代码才起作用。您的带有过滤器的代码也工作得很好!非常感谢你的帮助。现在我明白了发生了什么..正如你告诉我的,只有添加return false,我的代码才起作用。您的带有过滤器的代码也工作得很好!你的代码运行得很好!我不知道这个数组。非常感谢你的帮助!你的代码运行得很好!我不知道这个数组。非常感谢你的帮助!