Javascript &引用;未捕获类型错误:未定义不是函数;使用str.indexOf函数时
我在cosole中得到了这样一条信息:Javascript &引用;未捕获类型错误:未定义不是函数;使用str.indexOf函数时,javascript,Javascript,我在cosole中得到了这样一条信息:uncaughttypeerror:undefined不是一个函数,它简直让我发疯了!我看不出有什么错误,但也许其他人可以帮助我 var nav = document.getElementsByClassName('navigation'); console.log(nav); console.log(nav[0]); var nav_e = nav[0]; //var searched = nav[0].search('<a href="for
uncaughttypeerror:undefined不是一个函数
,它简直让我发疯了!我看不出有什么错误,但也许其他人可以帮助我
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);
}
}
}
var nav=document.getElementsByClassName('navigation');
控制台日志(nav);
控制台日志(导航[0]);
var nav_e=nav[0];
//搜索变量=导航[0]。搜索(“”);
如果(资产净值指数(“”)>-1){
var list=document.getElementsByClassName('post_body');
var xmlhttp=new XMLHttpRequest();
变量pbelement_encoded=“”;
变量pbelement=''
对于(i=0;i
错误出现在第一个if
语句中:if(导航索引(“”)>-1){
我还尝试将
nav_e.indexOf
替换为nav_e.search
,但它并没有改变任何事情indexOf方法应用于数组。这里,您将indexOf方法应用于数组的第一个元素,而不是数组var nav_e=nav[0];
因此,替换此代码:
if (nav_e.indexOf('<a href="forumdisplay.php?fid=11">Deck - Lab</a>') > -1)
if(导航索引(“”)>-1)
到
if(导航索引(“”)>-1)
如果您的应用程序中存在这种类型的错误-未定义不是一个函数
,它通常意味着一件事:您试图调用某个对象的方法,认为该对象是X
类型,而实际上它是Y
类型
这个例子特别有趣,因为它说明了元素(DOM)和它们对应的表示(例如字符串)之间的混淆
var nav = document.getElementsByClassName('navigation');
var nav_e = nav[0];
…将使用HtmleElement填充导航
,这是第一个使用导航
类的导航
(顺便说一句,使用querySelector('.navigation')
更容易获取该元素)
现在,nav_e
有一些内容,但它不是一个字符串,而且它本身和原型链上都没有indexOf
属性。要实现您最初的想法,代码实际上应该这样编写:
if (nav_e.innerHTML.indexOf('<a href="forumdisplay.php?fid=11') !== -1) { /* */ }
如果找不到元素,as
querySelector
方法返回null
。由“nav_e”引用的对象实际上不能是字符串。它不是null
或未定义的
,但不是字符串(或字符串)。添加对控制台.log的调用(“nav_e是”+(typeof nav_e));
它实际上是HTMLElement,是document.getElementsByCassName('navigation')[0]
的结果。要检查它的内容,请转到nav[0].innerHTML.indexOf(…)
。或者,更好的是,直接检查对应的元素(使用查询选择器('a[href=“forumdisplay.php?fid=11”]))
@raina77ow噢,duhh-我已经从顶部滚动了一下:)@raina77ow这真的很有帮助!你为什么不把它作为一个答案发布呢?无论如何,谢谢。这不管用,因为导航不是一个字符串(正如raina77ow所说)太好了,第二个选项看起来更简单,希望更快!谢谢!
if (nav_e.innerHTML.indexOf('<a href="forumdisplay.php?fid=11') !== -1) { /* */ }
if (nav_e.querySelector('a[href="forumdisplay.php?fid=11"]')) { /* ... */ }