>웹 프론트엔드 >JS 튜토리얼 >jQuery.buildFragment 사용 방법 및 ideas_jquery 분석

jQuery.buildFragment 사용 방법 및 ideas_jquery 분석

WBOY
WBOY원래의
2016-05-16 17:44:151425검색
1. jQuery.buildFragment 사용 방법
1. 매개 변수
jQuery.buildFragment(args, context, scripts) 2. 반환 값
return { 조각: 조각, 캐시 가능: 캐시 가능 } ;
2. 아이디어 분석
1. 컨텍스트 매개변수를 처리합니다.
전달된 컨텍스트 매개변수의 다양한 값에 따라 컨텍스트가 문서 루트 노드인지 확인합니다. 문서
2. 캐시 가능성 제한
2.1. 문자열이 512바이트 미만입니다.
2.2. 옵션 태그가 문자열에 존재하지 않습니다. (옵션 태그를 복제하면 선택한 상태가 손실됩니다. 캐시되지 않음)
2.3. 문자열이 , 태그가 없습니다(IE 6에서는 , 태그를 문서 조각에 포함할 수 없습니다).
2.4. 확인된 속성이 없음(복제 시 선택된 상태를 잃는 확인된 속성이 있는 노드에만 해당) 브라우저, 예: Safria)
2.5 문자열에 html5 태그가 존재하지 않습니다(해당되는 브라우저에만 해당). html5 태그를 지원하지 않음)
3. args 배열 처리
jQuery.clean 함수 항목 문자열을 통해 배열을 형식화하고 처리하고 dom 노드를 생성하여 문서 조각에 추가합니다
4. 캐시 값
캐시 값이 clean 함수로 처리된 문서 조각인 경우 배열 항목 문자열은 clean 함수 처리를 건너뜁니다.
5 , 반환 값
함수는 문서 조각을 저장하고 캐시할 수 있는 객체를 반환합니다. status
3. 소스코드 주석 분석
[jQuery1.8.3 기준]
코드 복사 코드는 다음과 같습니다.

var rnocache = /<(?:script|object|embed|option|style)/i,
rchecked = /checkeds*(?:[^=]|=s*.checked. )/i,
rnohimcache = new RegExp("<(?:" nodeNames ")[\s/>]", "i")
jQuery.fragments =
jQuery .buildFragment = function( args, context, scripts ) {
var 조각, 캐시 가능, 캐시 히트,
first = args[ 0 ]
// 정의되지 않은 항목 또는 jQuery 컬렉션으로 컨텍스트 설정 또는 노드
// context[0]에 액세스하면 IE9/10에서 예외가 발생할 수 있는 #12266을 수정하도록 업데이트되었습니다.
// 또한 일반 개체가 createDocumentFragment 예외를 발생시키는 #8950에 대한 수정 사항으로도 사용됩니다
/ / 매개변수 context의 다른 값에 따라 context가 문서 루트 노드 문서인지 확인하세요.
// jQuery 1.8.0 이후 코드는 이전 버전에 비해 크게 개선되었습니다.
// context 매개변수 값의 경우: unundefined, jQuery 객체, DOM 요소 노드 상태 개선 코드
// context 매개변수가 문서 조각(#document-fragment)인 버전 1.8.0 버그 해결
context = context || document;
context = !context.nodeType && context[0] || context
context = context.ownerDocument || context; /2 KB) 기본 문서와 연결된 HTML 문자열
// 복제 옵션은 선택한 상태를 잃으므로 캐시하지 마세요
// IE 6은 또는 조각에 요소
// 또한 WebKit은 cloneNode에서 'checked' 속성을 복제하지 않으므로 캐시하지 않습니다.
// 마지막으로 IE6,7,8은 캐시된 조각을 올바르게 재사용하지 않습니다. 알 수 없는 요소에서 생성된 항목 #10501
/ / html 문자열이 512바이트보다 작습니다.
// 옵션 태그를 복제하면 선택한 상태가 손실되므로 캐시되지 않습니다.
// IE 6은 <를 포함할 수 없습니다. ;object>, 태그를 문서 조각에 추가
// WebKit 브라우저(예: Safria)가 확인된 속성을 가진 노드를 복제하면 선택한 상태도 손실되므로 캐시되지 않습니다. 이 버그는 최신 버전의 Google에는 존재하지 않습니다
// 마지막으로 IE6, 7 및 8은 올바르지 않습니다. html5 태그 요소에 의해 생성된 캐시된 조각을 재사용합니다
if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document &&
first.charAt(0) === "<" && !rnocache.test( first ) &&
// 브라우저가 확인된 속성을 복제하고 html5를 지원할 수 있거나 확인된 및 html5 태그 요소가 html 문자열에 존재하지 않는 경우
(jQuery.support.checkClone || !rchecked.test( first )) &&
(jQuery.support.html5Clone || !rnosimcache.test( first )) ) {
// 캐시 가능으로 표시하고 히트 찾기
// 위 조건이 충족되면 캐시 가능 표시로 표시
cacheable = true;
// 배열 항목 문자열(주로 html 문자열)을 jQuery.fragment 객체의 속성 목록에 캐시하고 캐시 값을 가져옵니다.
//clean 함수가 동일한 문자열을 처리한 경우 두 번째 콘텐츠의 경우 캐시 값은 clean 함수로 처리된 문서 조각이며 문자열 구문 분석은 clean 처리를 건너뛸 수 있습니다.
fragment = jQuery.fragments[ first ]// clean 함수가 처리한 후 첫 번째 문자열(두 번째와 동일), 캐시히트가 true
cachehit = 조각 !== 정의되지 않음
}
// 캐시 값 결정
if ( !fragment ) {
fragment = context.createDocumentFragment()
// clean 함수를 통해 args 배열을 처리하고 배열 노드의 각 문자열에 대해 dom을 생성합니다.
// 제공된 문서 조각(fragment)에 추가됩니다. ), 따라서 반환된 객체의 조각 속성은
// 매개변수 args 배열 항목 문자열에 의해 생성된 dom 노드를 저장합니다.
jQuery.clean( args, context, 조각, 스크립트
// 업데이트 캐시하지만 false만 저장합니다
// 동일한 콘텐츠에 대한 두 번째 구문 분석이 아닌 경우
// 캐시히트가 true인 경우 jQuery .fragment[first]는 clean 함수에 의해 처리되는 문서 조각입니다
( 캐시 가능 ) {
jQuery.fragments[ first ] = 캐시히트 && 조각;
}
}
return { 조각: 조각, 캐시 가능: 캐시 가능 }

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.