따라서 대부분의 스크립트에서 DOM은 요소의 ID를 통해 직접 액세스됩니다.
이후 다양한 브라우저가 속속 등장하면서 점차 IE를 대체하게 되었습니다. 모든 종파가 통일된 규칙을 갖도록 하기 위해 표준화의 중요성이 점점 더 커지고 있습니다. ID에 직접 액세스하는 원래 방법은 점차 document.getElementById로 대체되었습니다. 요즘에도 여전히 ID를 사용하여 요소에 액세스하고 있다면 프로그램에 포함된 웹 페이지를 만들거나 철도부와 같은 초현실적인 골동품 웹사이트를 사용해야 합니다. :) 물론, 확실히 하는 한 사용자가 IE를 사용하여 액세스하는 것은 비표준이지만 사용하는 데에는 문제가 없습니다.
그러나 많은 타사 브라우저가 처음 출시되었을 때 당시 수많은 비표준 페이지와의 호환성을 보장하기 위해 ID를 사용하여 DOM에 액세스하는 비표준 관행을 유지했습니다. . 실제로 오늘날의 주류 브라우저 중 FireFox만이 이 접근 방식을 지원하지 않으며 Chrome, Opera, Safari 및 Mobile Safari는 모두 이를 지원합니다.
이 경우에는 FireFox도 지원하도록 하여 모든 브라우저가 해당 ID를 사용하여 DOM에 직접 액세스할 수 있도록 하는 것이 좋을 것입니다. 이는 빠르고 편리할 뿐만 아니라 번거로운 코드를 줄이고 작업 효율성을 향상시킵니다. .
구현은 매우 간단합니다. 문서가 로드된 후 id 속성으로 요소를 쿼리한 다음 해당 참조를 창 개체에 추가합니다.
var list = document.querySelectorAll('[id]')
for(var i = 0 ; i < list.length ; i )
{
if(list[i].id)
window[list[i].id]
}
물론 이 해킹은 FF에만 필요하므로 먼저 특성이 있는지 확인합니다. 마지막으로 코드를 간소화하고 배열 순회 콜백을 사용하여 간단한 한 줄로 압축합니다.
<script> <br>if('mozHidden' in document) [].forEach.call(document.querySelectorAll('[id]'),function(k){this [k.id] =k}); <br></script>
하지만 문서 로드가 완료되기 전에 querySelectorAll은 현재 요소 이전의 요소만 쿼리할 수 있습니다. <스크립트> 따라서 위의 코드는 문서의 마지막 부분에 배치되어야 합니다. ID를 사용한 액세스는 문서가 로드된 후에도 수행되어야 합니다. 그렇지 않으면 요소를 찾을 수 없습니다. 다음은 모든 브라우저에서 통과되는 테스트 페이지입니다.
<script> <br>onload = function() <br>{ <br>mytag.innerHTML = "안녕하세요. , document.getElementById!"; <br>} <br></script>
<script> <br>if('mozHidden' in document) [].forEach.call(document.querySelectorAll('[ id]' ),function(e){self[e.id]=e}) <br></script>
>