2014-09-06 111 views
0

我在cosole中得到這條消息:Uncaught TypeError: undefined is not a function它真的讓我發瘋了!沒有我能看到的錯誤,但也許別人能幫助我。「Uncaught TypeError:undefined不是函數」,同時使用str.indexOf函數

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語句錯誤ocures:if (nav_e.indexOf('<a href="forumdisplay.php?fid=11">Deck - Lab</a>') > -1) {

我也試圖與nav_e.search更換nav_e.indexOf,但它不會改變任何東西

+0

由「nav_e」引用的事物實際上不能是字符串。它不是'null'或'undefined',但它不是一個字符串(或字符串)。將調用添加到'console.log(「nav_e是一個」+(typeof nav_e));' – Pointy 2014-09-06 18:51:58

+3

它實際上是HTMLElement,是document.getElementsByClassName('navigation')[0]'的結果。要檢查其內容,請改爲使用'nav [0] .innerHTML.indexOf(...)'。或者,更好的是,直接檢查相應的元素(使用'querySelector('a [href =「forumdisplay.php?fid = 11」]') – raina77ow 2014-09-06 18:52:45

+0

@ raina77ow oh duhh - 我已經滾動頂部:) – Pointy 2014-09-06 18:53:04

回答

1

如果你在你的應用程序這種類型的錯誤 - undefined is not a function,這通常意味着一兩件事:你想調用某個對象的方法,相信這個目標是X型,而實際上它是Y類型。

這種情況特別有趣,因爲它說明了元素(DOM)和它們相應的表示(即字符串)之間流行的混淆。更具體地講,這些線路...

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

...將填充nav_e與HTML元素,那些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

+0

甜,第二個選項似乎更簡單,希望更快!謝謝! – TheEpicSurge 2014-09-08 21:01:14

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) 
+0

這不是鍋,因爲導航不是一個字符串(正如raina77ow所說) – TheEpicSurge 2014-09-06 20:28:44

相關問題