使用str.indexOf函数时,“Uncaught TypeError:undefined不是函数”

时间:2014-09-06 18:51:08

标签: javascript

我在cosole中收到此消息:Uncaught TypeError: undefined is not a function它确实让我发疯了!我没有看到任何错误,但也许其他人可以帮助我。

var nav = document.getElementsByClassName('navigation');

console.log(nav);
console.log(nav[0]);
var nav_e = nav[0];
  //var searched = nav[0].search('<a href="forumdisplay.php?fid=11">Deck - Lab</a>');

  if (nav_e.indexOf('<a href="forumdisplay.php?fid=11">Deck - Lab</a>') > -1) {

    var list = document.getElementsByClassName('post_body');
    var xmlhttp = new XMLHttpRequest();

    var pbelement_encoded = '';
    var pbelement = ''

    for (i = 0; i < list.length; i++) {
      var element = list[i];

      xmlhttp.onreadystatechange=function() {

        if (xmlhttp.readyState==4 && xmlhttp.status==200) {

          var result = xmlhttp.responseText;
          var result2 = result.replace(/fhvjgvghepoapeoaareupo/g,'');


          element.innerHTML = (xmlhttp.responseText.replace(/fhvjgvghepoapeoaareupo/g,''));
        }
      }

      pbelement_encoded = encodeURIComponent(element.innerHTML);
      pbelement = 'pb='+pbelement_encoded;

      //alert(pbelement);

      xmlhttp.open("POST","http://theepicsurge.altervista.org/PostAnalyzer.php",false);
      xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
      xmlhttp.send(pbelement);
    }
  }
}

第一个if语句中出现错误:if (nav_e.indexOf('<a href="forumdisplay.php?fid=11">Deck - Lab</a>') > -1) {

我也尝试用nav_e.indexOf替换nav_e.search,但它不会改变任何内容

2 个答案:

答案 0 :(得分:1)

如果您的应用程序中出现此类错误 - undefined is not a function,通常意味着一件事:您正在尝试调用某个对象的方法,认为此对象属于X类型,实际上它是Y类型。

这种情况特别有趣,因为它说明了元素(DOM)和它们相应的表示(即字符串)之间的流行混淆。更具体地说,这些线......

var nav = document.getElementsByClassName('navigation');
var nav_e = nav[0];

...将使用HTMLELement填充nav_e,这是navigation类的第一个。

(使用querySelector('.navigation'),btw更容易获取该元素

现在,nav_e有一些内容 - 但它不是一个字符串,并且它本身和原型链上都没有indexOf属性。为了实现您的原始想法,代码应该实际上是这样编写的:

if (nav_e.innerHTML.indexOf('<a href="forumdisplay.php?fid=11') !== -1) { /* */ }

但是,还有一个更好的想法:重用DOM方法来查找相应的元素。像这样:

if (nav_e.querySelector('a[href="forumdisplay.php?fid=11"]')) { /* ... */ }

...如果找不到元素,则querySelector方法返回null

答案 1 :(得分:0)

indexOf方法适用于array.and这里你在数组的第一个元素上应用indexOf方法而不是在数组var nav_e = nav[0];上,所以替换这个代码:

if (nav_e.indexOf('<a href="forumdisplay.php?fid=11">Deck - Lab</a>') > -1)

if (nav.indexOf('<a href="forumdisplay.php?fid=11">Deck - Lab</a>') > -1)