如何在for()句子中执行字符串函数?

时间:2014-10-13 13:28:16

标签: javascript

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那里学到了这一点。

3 个答案:

答案 0 :(得分:1)

这里有一些错误:

  1. 您需要使用innerHTML属性
  2. 实际检查元素的值
  3. 您无法使用动态值撰写正则表达式文字 - 您需要使用RegExp构造函数。
  4. 这应该有效:

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