죄송합니다! jquery를 1년 정도 사용해왔는데 $(selector)만 알고 있고 내부 선택기의 흐름이 전혀 명확하지 않습니다! 그래서 jquery의 소스코드를 살펴봤습니다. jquery에서 사용하는 선택기 엔진은 jquery 작성자의 또 다른 오픈소스 프로젝트인 sizzle입니다. github에서 사용 가능하며 가장 빠른 dom 선택기로 알려져 있습니다! 2000줄 미만의 코드.
위의 내용은 별로 흥미롭지 않습니다. 예를 들어 보겠습니다. $('.test')는 jquery에서 어떻게 처리되나요?
1. 먼저 다음과 같이 판단하세요
/ **
*querySelectorAll 함수 정보
*현재 문서의 특정 선택기와 일치하는 모든 요소를 반환합니다.
*var nodelist = element.querySelectorAll("div.test")
*브라우저 ie8, Chrome 지원, Firefox(3.5)
* 확실하지 않으면 구글에 검색해 보세요
*/
if ( document.querySelectorAll ) {
(function(){
var oldSizzle = Sizzle,
div = document.createElement("div"),
id = "__sizzle__";
div.innerHTML = "
"
// / / 쿼크 모드에서
if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
return;
}
Sizzle = function( query, context , extra, seed ) {
//querySelectorAll을 사용하여 쿼리
}
}
브라우저가 ie8 또는 Google인 경우 내장된 querySelectorAll을 직접 사용하세요. (".test")는 ie6을 사용하는 경우 다음과 같은 일이 발생합니다
2. querySelectorAll이 지원되지 않으면 다음 프로세스가 시작됩니다
개인적으로는 Sizzle이 좋다고 생각합니다. selector는 querySelectorAll이 'div.test.:eq(1)'을 지원하지 않기 때문에 querySelectorAll 함수의 향상된 버전입니다.
nth|eq|gt|lt|first|last| even|odd는 오른쪽에서 왼쪽으로 선택기에 표시되지 않습니다. 예를 들어 $('div img')는 먼저 모든 imgs를 선택하고 상위 항목이 div인지 여부에 따라 필터링합니다. 이것이 매우 효율적인 이유는 단 하나의 DOM 쿼리가 수행된다는 것입니다!
선택기에 'eq(1)'과 같은 문자가 나타나면 왼쪽에서 오른쪽으로 정상이 됩니다! 결과 집합을 필터링해야 하기 때문입니다.
오늘은 그 과정을 간략하게 살펴봤지만, 구체적인 코드를 자세히 공부하진 않았어요! 여기의 좋은 아이디어는 배우고 흡수할 가치가 있습니다.
Paizhuuan에 오신 것을 환영합니다.