2008-10-29 5 views
3

나는 HTML 페이지에서 다음과 같은 폼을 찾았습니다.document.forms [x] .elements에서 이미지 입력이 DOM에서 생략되는 것은 정상입니까?

<form name="form"> 
    <input type="image" name="foo" 
      src="somewhere.gif" alt="image" value="blah"/> 
    <input type="text" name="bar" value="blah"/> 
</form> 

자바에서 DOM을 통해 요소에 액세스 할 때 이미지 입력에 요소가 없습니다! 그냥 생략되었습니다. 따라서 document.forms[0].elements.length는 1이고 document.forms[0].element[0].type은 "텍스트"입니다.

이것은 파이어 폭스와 IE의 경우 인 것 같습니다. 내 참고 서적이나 웹 어디서나이 사실을 문서화 할 수 없습니다. 내가 찾을 수있는 것은 여기에 쓸데없는 코멘트이다 :

https://bugzilla.mozilla.org/show_bug.cgi?id=163822#c4

이것은 "그냥 같다"고 제안한다. 그렇다면 잘 될 것입니다.하지만 은 실제로가 어디에도 문서화되어 있지 않습니까? 역사적인 실수입니까, 아니면 그 이유가 있습니까?

답변

2

모든 브라우저에서 elements 속성의 동작처럼 보입니다.

그러나 childNodes 속성을 사용하여 JavaScript의 DOM을 통해 액세스 할 수 있어야합니다. 귀하의 예를 들어

:

document.forms[0].childNodes.length; // equals 5 (2 inputs and 3 text nodes). 
document.forms[0].childNodes[1];  // This is your input with type='image' 
0

재미있는 ... DOM 1 사양이 .elements로 정의 형태로 모든 제어 요소의 컬렉션을 반환

요소를.

HTML 4 스펙 부분 17.2.1에는 "이미지"유형이 나열되어 있지 않으므로 그 대답입니다.

+0

참이지만 'textarea'또는 'select' "inputs"가 나열되지 않고'.element' 속성에 표시됩니다. –

+0

사용자가 링크하는 HTML 사양 _does_ 목록 이미지 유형 (제출과 재설정 사이). 귀하가 말한 내용을 이해하지 못한다면. – PhiLho

0

참으로 나는 주석을 보았습니다 : "DOM은 그런 식으로 작동해야하는데, 그것이 Mozilla, NS4x 및 IE에서 작동하는 방식입니다. 우리가 원한다고하더라도 그것을 변경할 수는 없습니다. 휴식. "그래서 나는 역사적인 오류를 향해 몸을 기울일 것이다. 이미지 요소가 이미 HTML 2 DTD에 있습니다 ...

아마 그 이유는 저자가 getElement [s] ByXxx 함수 (또는 XPath!)를 사용하여 Dom 계층을 사용하지 못하게 할 가능성이있는 다른 가능한 범인입니다.

관련 문제