“uncatch TypeError: undefined is not a function” 在使用 str.ind

"Uncaught TypeError: undefined is not a function" while using str.indexOf function

本文关键字:ind str function TypeError uncatch undefined not is      更新时间:2023-09-26

我在鞋底收到这条消息: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.search替换nav_e.indexOf,但它不会改变任何东西

如果您的应用程序中遇到这种类型的错误 - undefined is not a function ,它通常意味着一件事:您正在尝试调用某个对象的方法,相信该对象是X类型,而实际上它是Y类型。

这种情况特别有趣,因为它说明了元素(DOM(与其相应的表示(即字符串(之间的普遍混淆。更具体地说,这些台词...

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

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

(顺便说一句,使用 querySelector('.navigation') 更容易获得该元素(

现在,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如果找不到元素。

indexOf 方法适用于数组。在这里,您将 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)