2012-06-17 4 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 Dreamerdocument.getElementsByTagName(elem) 대신 document.getElementsByTagName[elem]을 사용했기 때문에 오류의 원인이되는 버그를 발견했습니다.

하지만 그래서 당신은

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

또는 또 다른 아이디어 here를 사용해야합니다 hello, helloo, hellos etc 일치하는 것이기 때문에이 호출 domTools.searchInElements("p", /hello/);와 함께 또 다른 문제에 직면 할 수있다.

+0

+1 또한 RegExp를 사용하면 속도가 느립니다. 문자열 검색을 위해'String.indexOf()'를 사용할 수도 있습니다. – Joseph

관련 문제