좋은 질문. 요청을 받았을 당시 "결합 자 기반 쿼리"( John Resig가 호출 한 쿼리)를 수행하는 보편적으로 구현 된 방법 은 존재하지 않았습니다.
이제 : scope 의사 클래스가 도입되었습니다. 그것은되지 지원 에지 또는 IE의 [중고 Chrominum] 버전에 있지만, 이미 몇 년 동안 사파리에서 지원하고있다. 이를 사용하면 코드가 다음과 같이 될 수 있습니다.
let myDiv = getElementById("myDiv");
myDiv.querySelectorAll(":scope > .foo");
어떤 경우에는 .querySelectorAll
다른 좋은 구식 DOM API 기능을 건너 뛰고 사용할 수도 있습니다. 예를 들어, 대신에 myDiv.querySelectorAll(":scope > *")
를 쓸 수 있습니다 myDiv.children
.
그렇지 않으면 아직 의존 할 수 :scope
없다면 더 많은 사용자 정의 필터 로직 (예 : find myDiv.getElementsByClassName("foo")
who .parentNode === myDiv
) 을 추가하지 않고 상황을 처리하는 다른 방법을 생각할 수 없으며 실제로 하나의 코드 경로를 지원하려는 경우 이상적이지 않습니다. 임의의 선택기 문자열을 입력으로 사용하고 일치 목록을 출력으로 사용하려고합니다! 하지만 저처럼 "당신이 가진 모든 것이 망치였다"고 생각했기 때문에이 질문을하게 되었다면 DOM이 제공 하는 다양한 다른 도구 가 있다는 것을 잊지 마십시오 .