2011-04-30 3 views
6

내가 같은 간단한 일을하려고 반환 0.getElementsByTagName() 길이가 제로

나는 또한 getElementsByTagName("div").length returns zero for any webpage을 보았지만 정확하게 그 이유와 해결 방법을 이해하지 못했습니다. 또한 Firefox, IE, Chrome에서 이러한 현상이 발생한다는 사실을 알고 있습니다.

누구나 나를 도울 수 있습니까?

+0

아주 확실히 기억할 수는 없지만, elements.length을 수행하려고() - 길이는 remembe 수없는 함수가 될 수 있습니다. r –

+0

문서/DOM이로드 될 때 코드를 호출 하시겠습니까? getElementsByTagName을 호출하는 동안 입력 요소가 존재하지 않지만 NodeLists는 동적이므로 문서가로드 될 때 요소에 28 개의 입력이 모두 포함됩니다. – Rafael

+0

DOM이로드되지 않은 것 같습니다. 이 URL을 복사하여 페이지의 URL에 붙여 넣으면 DOM로드 후 내용을 확인할 수 있습니다. javascript : var elements = document.getElementsByTagName ("input"); alert ("요소에는"elements.length + "children"이 있습니다. – adorablepuppy

답변

7

NodeList은 실시간 수집이며 지연되지 않은 스크립트는 즉시 실행됩니다 (스크립트 지연 참조).

이 시도하고 당신이 무슨의 아이디어를 얻을 것이다 :

<html> 
<head> 
    <title></title> 
    <style></style> 
    <script type="text/javascript"> 
    var elements = document.getElementsByTagName("div"); 
    alert(elements.length); 
    </script> 
</head> 
<body> 
    <div>1</div> 
    <script type="text/javascript"> 
    //var elements = document.getElementsByTagName("div"); 
    alert(elements.length); 
    </script> 
</body> 
</html> 
+0

그는'console.log (elements)'와'console.log (elements.length)'가 일치하지 않는 것을보고하고 있습니다. 여기에 넣으면 1 요소, '1', 2 요소, '2'가 표시됩니다. – hyperslug

+0

알았어요. 위의 두 가지 주석이 모두 맞지만 예제를 제공하는 데 어려움을 겪었으므로 이것을 올바른 답으로 표시 할 예정입니다. 감사합니다 모두들! :) – mobius

+1

어떻게 그걸 해결 했니? – ikel