getAll 메소드는 비공개이며 조작 모듈에 있습니다. 코드에는 다음과 같이 몇 줄의 간단한 줄만 있습니다.
function getAll( elem ) {
if ( typeof elem.getElementsByTagName !== "undefine" ) {
return elem.getElementsByTagName( "*" ); else if ( typeof elem.querySelectorAll !== "정의되지 않음" ) {
return elem.querySelectorAll( "*" )
} else {
return []
}
}
이 메소드는 전달된 HTML 요소의 모든 하위 요소를 가져오는 데 사용되는 함수 이름에서 알 수 있습니다. 세 가지 내부 분기가 있습니다
1. 먼저 elem에 getElementsByTagName 메서드가 있는지 확인합니다. 그렇다면 getElementsByTagName 메서드를 사용하여 모든 하위 요소를 가져오고 반환합니다.
2. GetElementsByTagName은 지원되지 않습니다. 그런 다음 elem이 querySelectorAll 메서드를 사용하여 요소의 하위 요소를 가져오는 것을 지원하는지 확인합니다.
3, getElementsByTagName 및 querySelectorAll은 지원되지 않으며 빈 배열을 반환합니다.
이 코드를 보면 헷갈리고 두 번째 브랜치가 좀 중복되는 느낌이 들었습니다.
1, getElementsByTagName은
DOM 레벨 2
(이전)의 API입니다. 현재 모든 브라우저는 이미 이를 지원하므로 두 번째 항목을 입력할 필요가 없습니다. . 분기되어 직접 반환되었습니다. 다음 코드는 중복되지 않습니까? 2. querySelectorAll은
DOM 레벨 3
(최신)의 API이며 IE6/7에서는 지원되지 않습니다.
이것을 보니 마지막 두 가지가 중복된 것 같나요? 아니면 중복되지 않는 이유를 찾을 수 있습니까? 즉, 다음 조건을 만족하는 요소 elem을 찾으면 됩니다.
"elem에는 getElementsByTagName 메소드가 없지만 querySelectorAll 메소드가 있습니다."
많은 검색 끝에 마침내 토론을 통해 답을 찾았습니다(Xiaoniu가 발견). DocumentFragment는 이 조건을 충족합니다.
var frag = document.createDocumentFragment();
Alert('getElementsByTagName' in frag);
alert('querySelectorAll' in frag);
위 코드는 IE9/Chrome/Safari/Firefox에서 false로 표시됩니다. /오페라.
이제 더 이상 설명이 없습니다.
참고: DocumentFragment 개체의 몇 가지 특별한 점
1. IE6/7/8에는 createElement 메서드가 있지만 다른 브라우저(IE9/10/Safari/Chrome/Firefox/Opera)에는 그렇지 않습니다.
2. IE9/10/Firefox/Safari/Chrome/Opera에는 getElementsByTagName 메소드가 없지만 querySelectorAll 메소드가 있습니다.
관련:
http://www.jb51.net/article/30352.htm
https://developer.mozilla.org/en/DOM/document .createDocumentFragment
https://developer.mozilla.org/En/DOM/DocumentFragment
http://www.w3.org/TR/DOM-Level -3-코어/core.html#ID-B63ED1A3