문제

나는 이것이 잘 알려진 '것'인지 또는 Firefox 버전에서 새로운 것인지 모르겠다. 여기.

DOM에 DIV가있어 ID로 직접 액세스하려고합니다. 가장 간단한 형태로 다음과 같습니다.

 alert(btnTest.id);

이것은 모든 브라우저에서 잘 작동하지만 Firefox에서 문제를 일으켜 실제로 브라우저가 이상한 '깨진'상태로 이어졌습니다.

내가 얻은 오류는 'btntest가 정의되지 않았다'. Safari, Internet Explorer 또는 Chrome 에서이 오류가 발생하지 않았습니다.

나는 HTML 태그를 일치하지 않았다고 가정했다. 결국 모든 것을 벗겨 낸 후 나는 DocType를 제거하려고 시도했습니다. 갑자기 Firefox (v 3.0.10)에서 예상대로 올바른 ID를 반환하기 시작했습니다.

무슨 일이야 !!! ?? 분명히 '엄격한'모드를 사용하면 이름이 지정된 요소에 액세스 할 수 있어야하며 그렇지 않으면 다른 모든 브라우저가 저를 허용하는 이유는 무엇입니까?

메모: $ ( '#btntest') [0] .id로 쉽게 작업 할 수 있습니다. 이것이 더 나은 솔루션을 알아낼 수있을 때까지 지금해야 할 일입니다.

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" class="blueCircles">

 <head>

    <script type="text/javascript"
            src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

    <script>
        $(function() {
            alert("ID retrieved through jQuery: " + $('#btnTest')[0].id);
            alert("ID retrieved by accessing global variable: " + btnTest.id);
        });

    </script>

</head>
<body>
    <div id="btnTest">
    </div>
</body>
</html>
도움이 되었습니까?

해결책

W3C 사양에는 객체 참조가 요소에 대한 글로벌 스크립팅 범위에서 설정되어야한다고 말하는 것은 없습니다. id 속성. 이것은 글로벌 네임 스페이스를 불필요하게 오염시키는 것으로 간주되며 혼란스러운 오류로.

Firefox는 IE 호환성을 위해 Quirks 모드에서 실행할 때 참조를 설정합니다. Johnny Stenback은 세 번째 의견에서 설명합니다 이 지원을 추가하기위한 버그 이것이 표준 모드에서 지원되지 않는 이유 :

이 기능은 예를 들어 존재를 확인하는 표준 호환 코드에 영향을 미칩니다.sic] 한 번만 설정하는 글로벌 변수의. 이 변화로 "변동[sic] 이제 문서의 요소에 대한 참조가 될 수 있으며 코드는 개발자의 의도대로 작동하지 않을 수 있습니다.

그것이 우리 가이 기발한 것을 만들기로 결정한 이유입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top