찾다
웹 프론트엔드JS 튜토리얼jQuery 소스코드 분석-04 선택기-Sizzle-작동원리분석_jquery

작성자: nuysoft/Gao Yun QQ: 47214707 이메일: nuysoft@gmail.com
진술: 이 기사는 원본 기사입니다. 재인쇄해야 하는 경우 출처를 표시하고 원본 링크를 유지하세요.
Sizzle 소스 코드를 분석하기 전에 선택기의 작동 원리를 정리하겠습니다.

나중에 읽을 때 모호함이 없도록 먼저 선택기에 사용되는 일부 명사를 명확히 합니다.

Selector 표현식: "div > p"
블록 표현식: "div" "p"
열 선택기 표현식: "div, p"
블록 분할기: Sizzle의 Chunker Regular, 선택용 표현식이 분할됩니다. 왼쪽에서 오른쪽으로 블록 표현식으로
Finder: 블록 표현식을 검색하고 발견된 DOM 요소의 배열을 후보 집합이라고 합니다.
필터: 블록 표현식과 후보 집합을 필터링합니다.
관계 필터는 두 블록 사이의 관계를 필터링합니다. 블록 표현식에는 총 4개의 관계가 있습니다. "" 직계 형제 관계 ">" 상위-자식 관계 및 "~" 뒤의 모든 형제 관계
후보 세트: finder, 필터로 필터링
맵 세트: 후보 세트의 복사본, 필터 및 맵 세트를 필터링하기 위한 관계형 필터

워크플로:

1. 선택기 표현식을 왼쪽에서 오른쪽으로 분할하려면
쉼표 ","로 분할된 병렬 선택기 표현식을 만나면 첫 번째 쉼표 변환기 표현식 앞의 선택으로만 분할하고 나머지 부분을 기록하세요

2. Sizzle.find에서 마지막 블록 표현식을 검색하고 그 결과를 후보 세트에 넣은 다음 블록 표현식에서 일치하는 문자열 부분을 삭제합니다.
파인더 Sizzle.find는 정규 세트 Expr에서 해당 정규 표현식을 얻습니다. 일치하고 일치하는 경우 검색 기능 세트 Expr.find에서 해당 검색 기능을 가져와 실행합니다.
검색 순서는 Expr.order에 정의되어 있으며 순서는 다음과 같습니다. ID CLASS NAME TAG를 검색할 때 브라우저는 getElementsByClassName을 지원해야 합니다.
Expr.match는 ID의 정규 일치 표현식을 설정합니다. CLASS NAME ATTR TAG CHILD POS PSEUDO

3. 마지막 블록 표현식이 비어 있지 않은 경우 (문자열), 필터 Sizzle.filter는 집합을 필터링합니다
필터 Sizzle.filter는 단일 블록 표현식과 후보 집합 집합의 요소에만 작동합니다. 후보 집합의 요소가 나머지를 만족하는지 확인하여 작동합니다. 블록 표현식
필터 Sizzle.filter의 필터링 과정 중 조건에 맞지 않는 것은 false로 설정되고, 조건에 맞는 것은 수정되지 않습니다
필터링 시 해당 정규식을 정규식에서 가져옵니다. Expr.leftMatch를 설정하고 블록 표현식을 일치시킵니다. 일치에 성공하면 Expr.filter에서 해당 필터 함수를 가져와 실행합니다.
Expr.leftMatch는 Expr.match와 동일한 수의 정규식을 정의합니다. 공식: ID CLASS NAME ATTR TAG CHILD POS PSEUDO
필터 함수 세트 Expr.filter는 PSEUDO CHILD ID TAG CLASS ATTR POS의 필터 기능을 정의합니다.
필터 Sizzle.filter는 필터링 전에 사전 필터 Expr을 호출합니다. .preFilter는 필터링에 필요한 매개변수를 수정합니다. , 그러나 CLASS는 예외
CLASS가 사전 필터링되면 클래스와 일치하는 요소를 후보 집합으로 직접 반환하도록 최적화되어 필터링 범위와 후보 집합 범위가 좁아집니다
위에서 얻은 후보 집합 집합을 복사합니다. 검색 및 필터링하여 매핑 세트 checkSet에 넣습니다. 후속 필터링 작업은 checkSet
에서 수행되며 마지막 블록 표현식의 검색 및 필터링이 여기서 끝나고 후보 세트 세트와 checkSet
4. 매핑 세트 checkSet에서 오른쪽에서 왼쪽으로 나머지 블록 표현식을 필터링하고, 이전 블록 표현식과의 관계를 기반으로 관계 필터 세트 Expr.relative에서 해당 함수를 가져옵니다 관계형 필터 Expr.relative의 필터링 과정에서 조건에 맞지 않는 것은 false로 설정되고, 조건에 맞는 것은 부모 요소, 조상 요소, 형제 요소 간의 관계로 설정됩니다.
네 가지 유형이 있습니다: " " 직계 형제 관계 ">" 아버지-아들 관계; "~" 이후의 모든 형제 관계
관계 필터 Expr.relative의 필터링 과정에서 다음과 같은 경우가 발생합니다. 표현식은 태그 TAG이고 태그 유형 nodeName을 직접 비교하여 동일한지 확인합니다.
태그 TAG가 아닌 경우 필터 Sizzle.filter가 호출되어 필터링 프로세스에 대해 3단계를 참조하세요.
오른쪽부터 모든 블록 표현식이 필터링될 때까지 왼쪽으로 필터링

5. 필터링된 매핑 집합 checkSet에 따라 매핑 집합 checkSet
에서 null인 경우 최종 결과 집합을 선택합니다. , false는 필터링됩니다
Element(nodeType===1)가 아니면 필터링됩니다
컨텍스트가 Document가 아니고 Element이고 Element의 하위 요소가 아닌 경우에는 필터링됩니다. 필터링됨

6. 병렬 표현식이 있는 경우 1~5를 반복하고 최종 결과 집합을 병합, 정렬, 중복 제거
선택기 표현식이 하나만 있고 병렬 선택기 표현식이 없으면 정렬이 없습니다. 필수

다음 프로세스는 Sizzle에 속하지 않고 jQuery의 Sizzle 확장에 속합니다

7. context가 여러 개인 경우 각 context에 대해 1~6을 반복합니다.
Multiple context 예: $(' div').find('div > p'), $('div')는 여러 div를 찾을 수 있습니다.
사실 7단계는 7단계부터 호출 1까지의 jQuery 선택기로의 입구입니다. ~6, 결과 세트로 빈 jQuery 객체에서 Pass를 호출하는 경우
기본적으로 문서는 컨텍스트입니다. (context || rootjQuery).find( selector )

8 결과를 병합하고 제거합니다. 여러 컨텍스트에서 찾은 세트 반복하여 결과 세트 반환

완료!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
什么是 Microsoft Teams 中的对讲机及其工作原理?什么是 Microsoft Teams 中的对讲机及其工作原理?Apr 14, 2023 pm 12:31 PM

Microsoft Teams 上的对讲机是什么?顾名思义,新的 Walkie Talkie 功能让 Microsoft Teams 上的用户可以通过使用他们的声音与他们的团队成员进行实时交流,从而与他们联系。在频道中连接到 Walkie Talkie 的用户可以一次听一个即按即说格式的对方讲话。这样一来,只有一个人在说话的时候才能引起注意,而不会被其他人打断。微软将这一功能定

听诊器的工作原理是什么听诊器的工作原理是什么Aug 31, 2023 pm 02:37 PM

听诊器的工作原理是通过声学传感器将人体内部的声音转化成电信号,然后通过耳机或扩音器放大和传输这些信号给医生,它的工作原理基于声学原理,能够帮助医生听到内部声音并进行疾病诊断。听诊器的核心部件是声学传感器,通常由一个共振膜和一个接收器组成,共振膜是一个薄膜,通常由金属或塑料制成,它能够感受到人体内部的声音振动,当共振膜受到声波的作用时,它会产生微小的振动。

vue中keep-alive的工作原理及使用方法详解vue中keep-alive的工作原理及使用方法详解Jul 21, 2023 am 11:58 AM

Vue.js是一个流行的前端框架,提供了一些方便的功能来优化性能和提升开发效率。其中一个功能是keep-alive,它可以帮助我们在组件之间保留状态,从而减少不必要的渲染和请求。本文将详细介绍keep-alive的工作原理以及使用方法,并提供一些代码示例。一、keep-alive的工作原理在Vue.js中,每当我们切换组件时,组件都会被重新创建

深入了解Spring框架的架构与工作原理深入了解Spring框架的架构与工作原理Jan 24, 2024 am 09:41 AM

深入剖析Spring框架的架构与工作原理引言:Spring是Java生态系统中最受欢迎的开源框架之一,它不仅提供了一套强大的容器管理和依赖注入功能,还提供了许多其他功能,如事务管理、AOP、数据访问等。本文将深入剖析Spring框架的架构与工作原理,并通过具体的代码示例来解释相关概念。一、Spring框架的核心概念1.1IoC(控制反转)Spring的核心

计算机按工作原理可分为什么计算机按工作原理可分为什么Dec 07, 2020 am 10:24 AM

计算机按工作原理可分为数字计算机和模拟计算机。数字式电子计算机是当今世界电子计算机行业中的主流,其内部处理的是一种称为符号信号或数字信号的电信号,它有着运算速度快、运算精度高、通用性强等特点。模拟计算机是根据相似原理,用一种连续变化的模拟量作为被运算的对象的计算机;模拟计算机以电子线路构成基本运算部件。

了解Spring拦截器的原理和优点了解Spring拦截器的原理和优点Dec 30, 2023 pm 12:25 PM

探究Spring拦截器的工作原理及优势引言:Spring框架是Java开发中最常用的框架之一,它提供了丰富的功能和灵活性,使得开发者能够更加高效地开发应用程序。其中一个重要的组件就是拦截器(Interceptor)。本文将深入探讨Spring拦截器的工作原理和优势,同时给出具体的代码示例。一、Spring拦截器的工作原理Spring拦截器使用了面向切面编程(

交换机的工作原理是什么交换机的工作原理是什么Dec 26, 2023 am 11:56 AM

交换机的工作原理包括:1、数据帧接收和解析;2、转发表的更新;3、数据帧的转发;4、泛洪处理;5、维护连接。详细介绍:1、数据帧接收和解析,当交换机接收到一个数据帧时,它会首先对数据帧进行解析,提取出其中的源MAC地址和目的MAC地址等信息;2、转发表的更新,交换机内部维护着一个转发表,这个表记录了MAC地址与接口的对应关系;3、数据帧的转发等等。

了解PHP中散列查找算法的工作原理及实际应用场景。了解PHP中散列查找算法的工作原理及实际应用场景。Sep 19, 2023 pm 01:00 PM

了解PHP中散列查找算法的工作原理及实际应用场景概述:散列查找算法是一种常用的数据结构和算法,在PHP编程中也有着广泛的应用。它通过将关键字映射为数据结构中的索引位置来实现快速的查找操作。本文将介绍散列查找算法的工作原理和实际应用场景,并给出具体的代码示例。一、散列查找算法的工作原理散列查找算法的基本思想是通过一个散列函数将关键字映射到数据结构中的索引位置,

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.