2012-06-17 26 views
-1

當我運行下面的一段代碼時,螢火蟲控制檯說elem是未定義的,雖然它不是!elem是不確定的?

var domTools = {}; 
domTools.searchInElements = function (elem, pattern) { 
    if (pattern.constructor !== RegExp) { 
     throw "Pattern must be a RegExp"; 
    } 
    if (elem.constructor !== String) { 
     throw "Element must be a String"; 
    } 
    elem = document.getElementsByTagName[elem]; 
    var matches = []; 
    for (e = 0; e < elem.length; e++) { 
     if (pattern.test(elem[e].innerHTML)) { 
      matches.push(elem[e]); 
     } 
    } 
    return matches; 
} 
domTools.searchInElements("p", /hello/); 

它在for聲明中給我提供了錯誤。所有這些代碼都是在頁面已經加載的情況下運行的。這是爲什麼發生?

回答

4

這是()getElementsByTagnName()[]

elem = document.getElementsByTagName(elem); 

覺得作爲一個函數調用,所以你不會忘記它使用()。不要忘記使用開發者控制檯F12來發現這些問題。

3

由於Joseph the Dreamer已經找到了導致錯誤的錯誤,因爲您使用了document.getElementsByTagName[elem]而不是document.getElementsByTagName(elem)

但你可能會面臨與此調用domTools.searchInElements("p", /hello/);另一個問題,因爲它會匹配hello, helloo, hellos etc所以你應該使用

domTools.searchInElements("p", /^hello$/) 

或只是另一個想法here

+0

+1,但也要注意使用RegExp很慢。你也可以使用'String.indexOf()'來搜索字​​符串。 – Joseph