데이터 부분의 코드는 1381행에서 시작됩니다. 코드의 처음 몇 줄 핵심:
// 데이터가 정의되지 않았습니다. 이는 현재 호출이 데이터를 쿼리하는 것이지만 객체에 데이터가 없음을 나타냅니다. , 그리고 직접 반환
if((!id || (pvt && id && !cache[id][internalKey])) && getByName && data === undefine) {
return; >if(!id) {
if(isNode) {
// uuid 시드를 사용하여 고유 ID를 증분적으로 할당합니다. DOM 요소에만 필요합니다. 전역 캐시에 저장해야 하기 때문에
elem[jQuery.expando] = id = jQuery.uuid;
} else {
id = jQuery.expando;
}
// 원래 값 지우기
if(!cache[id]) {
cache[id] = {}
if(!isNode) {
cache[id].toJSON = jQuery.noop
}
}
// 확장을 사용하여 캐시를 확장하고 속성을 추가하여 데이터 저장
if(typeof name === "object" || typeof name === " function") {
if(pvt) {
cache[id][internalKey] = jQuery.expand(cache[id][internalKey], name);
} else {
cache[id ] = jQuery .extend(cache[id], name);
}
}
thisCache = cahce[id]
// 키 충돌 방지
if(pvt) {
if( !thisCache[internalKey]) {
thisCahce[internalKey] = {};
}
thisCache = thisCache[internalKey]
}
if(data !== 정의되지 않음) {
thisCache[jQuery.camelCase(name)] = data;
}
return getByName ? thisCache[jQuery.camelCase(name)] : thisCache: 함수( elem , name, pvt ) { // 앞 부분은 데이터와 유사합니다. // ... // 일부 브라우저는 Element에 대한 삭제 작업을 지원하지 않습니다. 이 브라우저 기능은 jQuery.support에서 확인하세요. // 삭제에 실패하면 먼저 null로 설정합니다. if ( jQuery.support.deleteExpando || 캐시 != window ) { 캐시 삭제[ id ] } else { 캐시[ id ] = null }
;CODE>var InternalCache = 캐시[ id ][ InternalKey ]
// 데이터가 남아 있으면 지우고 다시 설정하여 성능을 높이세요.
if ( InternalCache ) {
cache[ id ] = {} ;
cache[ id ][ InternalKey ] = InternalCache;
// 더 이상 데이터가 없으면 모두 삭제
} else if ( isNode ) {
// 삭제가 지원되는 경우 , 삭제하세요.
// IE는 RemoveAttribute를 사용하므로 한번 시도해 보세요. 다시 실패하면 null로만 설정될 수 있습니다.
if ( jQuery.deleteExpando ) {
delete elem[ jQuery.expando ];
} else if ( elem.removeAttribute ) {
elem.removeAttribute( jQuery.expando )
} else {
elem[ jQuery.expando ] = null
}
}
}