html:
<input id="inputAddress_data"/ value="apple">
<ul>
<li class="adrList_3a">abc</li>
<li class="adrList_3a">def</li>
<li class="adrList_3a">123</li>
<li class="adrList_3a">456</li>
<li class="adrList_3a">ap</li>
<li class="adrList_3a">apple</li>
<li class="adrList_3a">banana</li>
<li class="adrList_3a">bananapple</li>
<li class="adrList_3a">waple</li>
<li class="adrList_3a">abc</li>
<li class="adrList_3a">abc</li>
....... more than 50,000<li>.
</ul>
js:
inputAddress_data = document.getElementById('inputAddress_data');
adrList_3a = document.getElementsByClassName('adrList_3a');
for(i=0; i<adrList_3a.length; i++) {
if(adrList_3a[i].match(/inputAddress_data.value/gi)) {
adrList_3a[i].style.display = 'block';
}
}
我试图找出列表的值是否等于input.value。 所以我写了这段代码。 但它没有使用此错误消息:
未捕获的TypeError:undefined不是函数
我认为此错误消息的意思是'match'
不是已定义的函数。
但我确信match()
是现有功能。我在3分钟前从w3schools那里学到了这一点。
答案 0 :(得分:1)
这里有一些错误:
innerHTML
属性RegExp
构造函数。这应该有效:
inputAddress_data = document.getElementById('inputAddress_data');
adrList_3a = document.getElementsByClassName('adrList_3a');
for(i=0; i<adrList_3a.length; i++) {
if(adrList_3a[i].innerHTML.match(new RegExp(inputAddress_data.value,'gi'))) {
adrList_3a[i].style.display = 'block';
}
}
答案 1 :(得分:1)
match()
是现有方法 - 在字符串上。你不是在看字符串,而是在看li
元素。 li
个元素没有match()
方法。
li.innerHTML
会返回一个字符串,您可以match()
。
但是你需要将value
变成正则表达式;现在你正在搜索inputAddress_d...
所以:
var re = new RegEx(inputAddress_data.value, "gi");
for(i = 0; i < adrList_3a.length; i++) {
if(adrList_3a[i].innerHTML.match(re)) {
adrList_3a[i].style.display = 'block';
}
}
答案 2 :(得分:0)
问题是adrList_3a [i]不是字符串而且没有corse的匹配功能 你可以在某些浏览器或内部html中使用textContent
inputAddress_data = document.getElementById('inputAddress_data');
adrList_3a = document.getElementsByClassName('adrList_3a');
for(i=0; i<adrList_3a.length; i++) {
if(adrList_3a[i].textContent.match(new RegExp(inputAddress_data.value,"gi"))) {
adrList_3a[i].style.display = 'block';
}
}