【发布时间】:2013-01-27 05:35:26
【问题描述】:
我想检查是否有任何 div 包含输入字段中输入的所有单词。但是,目前我陷入这样一种情况,即一旦输入一个空格,它就会重新开始,因此有点像 OR 运算符而不是 AND 运算符。谁能把我推向正确的方向?非常感谢!
这是我目前所拥有的:
<div class="search">aa ab ac ad</div>
<div class="search">ab ba bb bc</div>
<div class="search">bb cc dd ee</div>
<script>
function search(query) {
var divs= document.getElementsByTagName('div');
var words = query.toLowerCase().split(" ");
for (var h = 0, len = divs.length; h < len; ++h) {
for (var i = 0; i < words.length; i++) {
if (divs[h].innerHTML.indexOf(words[i]) == -1) {
divs[h].style.backgroundColor = '#fff';
}
else {
divs[h].style.backgroundColor = '#ddd';
}
}
}
}
</script>
<input type="text" onkeyup="search(this.value);">
显然我不是很清楚。我很抱歉。
我需要在 Javascript 中进行哪些操作,以便它查找 div 是否包含 AND words[0] AND words[1] AND words[2] 等(因此,以任何随机顺序)?
现在,当拆分发生时,函数从头开始。
【问题讨论】:
-
我肯定会考虑为此使用正则表达式,它似乎更合适。
-
在
divs[h].style.backgroundColor = '#fff';之后添加break,这样一旦发现缺少一个单词,它就会设置颜色并移动到下一个div。 -
...您也可以将
divs[h].style.backgroundColor = '#ddd';放在内部循环之后。每次有单词匹配时都没有必要设置样式。但是,您需要使用标签来continue外部循环,而不是破坏内部循环。 -
...或将
divs[h].style.backgroundColor = '#ddd';放在内部循环之前。然后,您可以根据需要跳过break或continue语句。 -
...另外,我想用户可以选择输入少于
4的单词。如果是这样,您可能应该检查query的.length。如果没有足够的单词,那么循环就没有意义,因为你知道它们并不全。
标签: javascript search html contains