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