2010-02-17 4 views
1

다음을 파일 (예 : file.htm)에 저장하면 작동 => "3"이 출력됩니다. 그러나 'document.write ("Hello :");'줄의 주석을 제거하면 ' 더 이상 작동하지 않습니다 ("0"인쇄). 왜 그 사람이 누군지 압니까?이상한 출력 document.links.length

<html> 
<head> 
<script language="JavaScript" type="text/javascript"> 
function display() { 
    //document.write("Hello: "); 
    document.write(document.links.length + "<br>"); 
} 
</script> 
</head> 
<body onload="display()"> 

<A href="link0.htm">Link 0</A> 
<A href="link1.htm">Link 1</A> 
<A href="link2.htm">Link 2</A> 

</body> 
</html> 

답변

6

크롬에서 나는이 동작과 대부분의 다른 브라우저를 관찰합니다. 이유는 다음과 같습니다.

첫 번째 document.write이 없으면 예상대로 작동합니다. 특별한 것은 없습니다.

그러나 첫 번째 document.write을 포함하면 문서의 전체 내용을 덮어 쓰므로 링크가 남아 있지 않습니다. 두 번째 document.write은 문서에 0 개의 링크가 있음을 올바르게보고합니다.

+0

실제로 이것을 입력하고있었습니다! 좋은 직장 – vpram86

+2

꽤 많이 document.write를 사용하지 마십시오. 이제까지. – Matchu

+0

IE, Firefox 및 Chrome에서 사용해 보았습니다. 나는 u가 정확하고 ur 설명이 매우 분명하다고 생각합니다. 감사! – yeeen

1

먼저 출력을 "표시"하려면 document.write()를 사용하지 마십시오. 테스트 일 뿐인 경우에는 alert() 메서드를 사용하십시오. document.write()는 페이지가로드되는 동안에 만 사용되어야합니다. 스트림이 닫히고 문서가로드되면 document.write()는 예측할 수없는 결과를 가져옵니다.

두 번째로 document.links를 사용하는 대신 document.getElementsByTagName ("A")을 사용해보십시오. 그러면 문서의 모든 앵커 태그 배열을 얻을 수 있습니다.

+0

다른 태그에 유용 할 수 있지만 문서의 "___"태그 수를 어떻게 계산합니까? – yeeen

+0

그 질문을하지 않았습니다. 귀하는 링크 () ("앵커"태그라고도 함)에 대해 물었고 귀하의 예는 정확히 그 태그와 그 이상을 보여줍니다. – Robusto

+0

예제에서는 앵커 태그의 수를 정확히 계산합니다. – yeeen

0

document.write을 처음 호출하면 DOM에서 모든 링크가 제거되기 때문입니다. document.body의 전체 innerHTML을 "Hello :"로 바꿉니다.

어쨌든 document.write을 사용하지 마십시오.