[오리지널] jQuery 소스 분석-11 DOM 스트리밍-Traversing-3 핵심 함수
5384 단어 jquery
jQuery 소스 분석 시리즈(지속적인 업데이트)
1. DOM은 3개의 핵심 함수를 반복합니다.
jQuery.dir( elem, dir, until )
한 요소에서 출발하여 어떤 방향의 모든 요소를 반복해서 검색하고 문서의 대상을 만나거나 until과 일치하는 요소를 만날 때까지 기록합니다
jQuery.nth( cur, result, dir, elem )
한 원소에서 출발하여 어떤 방향의 N번째 원소를 반복적으로 검색하다
jQuery.sibling( n, elem )
원소 n의 모든 후속 형제 원소, n 포함, elem 포함하지 않음
jQuery 객체의DOM 스트리밍 방법(대부분) 이 3개의 핵심 함수에 대한 호출이 변환되고 이 3개의 핵심 함수는 마지막에 모두 원생 API에 대한 조작으로 변환되어 그들 간의 관계를 확인한다.
핵심 함수
jQuery 객체 메서드
속뜻
기본 API 사용
jQuery.dir
parents
선조 원소
parentNode
parentsUntil
조상 원소, until 포함하지 않음
parentNode
nextAll
모든 형제 요소
nextSibling
prevAll
모든 오라버니 요소
previousSibling
nextUntil
모든 형제 요소는 until을 포함하지 않습니다
nextSibling
prevUntil
모든 형님 요소는 until을 포함하지 않습니다
previousSibling
jQuery.nth
next
다음 형제 요소
nextSibling
prev
이전 형 요소
previousSibling
jQuery.sibling
siblings
모든 형, 형제 원소, 현재 원소 포함하지 않음
elem.parentNode.firstChild
children
모든 하위 노드
elem.firstChild
2. jQuery.dir( elem, dir, until )
/**
* , , document until
* ( ):cur.nodeType !== 9 && !jQuery( cur ).is( until )
* elem
* dir , :parentNode nextSibling previousSibling
* until , until ,
*/
dir: function( elem, dir, until ) { // , , 、 、 !
var matched = [], //
cur = elem[ dir ]; // , dir , ( cur , elem )
//
/**
* , document until
* cur.nodeType !== 9 DOM cur document
* !jQuery( cur ).is( until ) DOM cur until
*
* until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )
* , jQuery.is :until !== undefined && cur.nodeType === 1
* , 、 , , 。
* jQuery
*/
while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
if ( cur.nodeType === 1 ) { // Element,
matched.push( cur );
}
cur = cur[dir]; // dir , ,
}
return matched;
}
3. jQuery.nth( cur, result, dir, elem )
/**
* , N
* cur
* result ,1 ,2 , ( 1 ?)
* dir
* elem
*/
nth: function( cur, result, dir, elem ) {
result = result || 1; // ? 1 ? , 1 ,1 ,2 ,
var num = 0; // , 1
// for !
// dir dir ,nth
// dir ,nth
for ( ; cur; cur = cur[dir] ) { //
if ( cur.nodeType === 1 && ++num === result ) { // ,num 1
break;
}
}
// result 0 1,
// result 0, undefined
return cur;
}
4. jQuery.nth( cur, result, dir, elem )
/**
* n , n, elem
* n ( )
* elem
*/
sibling: function( n, elem ) {
var r = [];
for ( ; n; n = n.nextSibling ) { // , n
// nodeType === 1, Element, Text、Attr、Comment
if ( n.nodeType === 1 && n !== elem ) {
r.push( n );
}
}
return r;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
jQuery 전후 예이 기사에서는 jquery after() 및 before() 메소드의 예를 볼 것입니다. before() 메서드는 선택한 요소 앞에 지정된 콘텐츠를 삽입합니다. after() 메서드는 선택한 요소 뒤에 지정된 콘텐츠...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.