이 1.5 버 전의 가장 큰 업 데 이 트 는 AJAX 의 완전 재 작성 으로 더욱 강 한 확장 성 을 제공 합 니 다.그러나 정력 과 편폭 에 얽 매 여 새로운 AJAX 에 대한 분석 은 다음 편 으로 넘 어가 세부 적 인 개선 사항 을 간단히 소개 한다.jQuery._Deferred 와 jQuery.Deferred 는 먼저 이 두 가지 새로운 사물 을 말 하지 않 을 수 없다.그들 은 인 프 라 시설 로 존재 하기 때문에 이 두 가 지 를 분명하게 말 하지 않 으 면 어떤 문 제 는 설명 할 방법 이 없다.우선 jQuery.Deferred 는 jQuery.Deferred 의 증강 판 이기 때문에 이 문제 에 대해 jQuery.Deferred 를 구 하면 대부분의 문 제 를 설명 할 수 있 습 니 다.Deferred 가 뭐 예요?말 그대로 제 첫 반응 은'로드 지연'입 니 다.이니셜 은'유형'의 정의 일 것 입 니 다.그래서 이것 은'로드 지연 기능 투명 제공'의 유형 일 것 입 니 다.그러나 실제로 약간의'지연'이라는 뜻 을 가지 고 있 지만 이 물건 은 로드 지연 을 실현 하 는 데 쓰 이 는 것 이 아니다.쉽게 말 하면 jQuery.Deferred 는 함수 대기 열 입 니 다.그의 역할 은 다음 과 같은 몇 가지 가 있 습 니 다.몇 개의 함 수 를 저장 합 니 다.특정 시간 에 저 장 된 함 수 를 모두 실행 합 니 다.실행 후 새로 들 어 온 함 수 는 즉시 실 행 됩 니 다.뭔 가 닮 은 것 같 지 않 아 요?네,jQuery 의 ready 함 수 는 바로 이러한 논리 입 니 다.실제 jQuery 1.5 의 ready 함수 도 이 위 에 접목 되 었 습 니 다.jQuery._Deferred 는 다음 인 터 페 이 스 를 제공 합 니 다:done:function(fn1,fn2,...)의 형식 으로 함 수 를 대기 열 에 추가 합 니 다.fire:function(context,args)형식 으로 context 를 사용 하여 this 대상 을 지정 하고 args 가 지정 한 매개 변 수 를 사용 하여 대기 열 에 있 는 모든 함 수 를 호출 합 니 다.fire 호출 후,Deferred 는 isResolved 상태 에 들 어 갑 니 다.앞으로 done 에 대한 호출 은 함 수 를 저장 하지 않 고 함 수 를 직접 호출 합 니 다.resolve:fire(this,arguments)를 호출 하 는 간단 한 방법 입 니 다.isResolved:판단 용Deferred 가 isResolved 상태 에 있 는 지 여 부 는 앞의 fire 함수 의 설명 을 참조 하 십시오.cancel:전체 대기 열 을 취소 합 니 다.미래 에 fire 든 아니 든 대기 열 에 있 는 함수 가 더 이상 호출 되 지 않 습 니 다.똑똑히 말했어 jQuery.Deferred,jQuery.Deferred 를 다시 보 세 요.이 물건 은 사실 두 개Deferred 로 구 성 된 첫 번 째 이름 은 deferred 로'정상'상태의 함 수 를 보관 하 는 데 사 용 됩 니 다.두 번 째 는 failDeferred 라 고 하 는데'오류'상태의 함 수 를 보관 하 는 데 사 용 됩 니 다.이 동시에 jQuery.Deferred 는 새로운 인 터 페 이 스 를 제공 합 니 다.then:function(done,fail)의 형식 으로 done 을 deferred 에 추가 하고 fail 을 failed Deferred 에 추가 합 니 다.fail:failDeferred 에 해당 하 는 done 함수 입 니 다.fireReject:failDeferred 에 해당 하 는 fire 함수 입 니 다.reject:failDeferred 의 resolve 함수 에 해당 합 니 다.isRejected:failDeferred 에 해당 하 는 isResolved 함수 입 니 다.동시에 jQuery.Deferred 는 cancel 함 수 를 취소 했다.그럼 이 건 무슨 소 용이 에 요?'정상'과'오류'두 가지 상태 가 있 으 면서 도 비동기 적 이어서 쉽게 생각 할 수 있 는데.......................................................................jQuery.ready 의 변화 jQuery 가 생 겨 서.Deferred 라 는 것 은 jQuery.ready 함수 가 함수 대기 열 에 의존 하 는 것 으로 바 뀌 었 습 니 다.구체 적 인 변 화 는 원래 의 ready List 변 수 는 더 이상 하나의 배열 이 아니 라 jQuery. 로 바 뀌 었 습 니 다.Deferred 대상.원래 DOMContentLoaded 에서 readList 의 모든 함수 의 논 리 를 호출 했 는데,지금도 jQuery 를 사용 하고 있 습 니 다.Deferred 에서 원래 코드:
while ( (fn = ready[ i++ ]) ) {
fn.call( document, jQuery );
}
4.567913.jQuery.parseXML 함수 가 정적 함수 jQuery.parseXML 을 추가 하여 브 라 우 저 호 환 문자열 에서 XML 문서 로 전환 하 는 기능 을 제공 합 니 다.이 함수 의 논리 적 네트워크 는 매우 많 습 니 다.jQuery 도 특별한 점 이 없습니다.크게 다음 과 같은 두 가지 로 나 눌 수 있 습 니 다.표준 브 라 우 저 에 대해 DOMParser 대상 을 사용 합 니 다
readyList.fire( document , [ jQuery ] );
data 부분 에 jQuery.hasData 함 수 를 추가 하여 하나의 요소 가 jQuery 에 추 가 된 데이터 가 있 는 지 판단 하 는 데 사 용 됩 니 다.jQuery.expando 의 실현 을 수 정 했 습 니 다.원래 단순히 현재 시간 을 가 져 온 토대 에서 무 작위 수 를 추 가 했 습 니 다:expando="jQuery"+(jQuery.fn.jquery+Math.random().replace(/\D/g,");이렇게 하면 같은 시간 에 여러 개의 jQuery 던 전 을 도입 할 수 있 습 니 다.이 몇 개의 던 전 간 의 expando 는 서로 충돌 하지 않 고 요소 상의 data 를 착란 시 킬 수 있 습 니 다.일반적으로 jQuery 던 전 을 여러 개 도입 하 지 는 않 지만 SealJS 등 을 사용 할 때 설정 이 잘못 되면 이런 문제 가 발생 하기 쉽다.DOM 작업 부분의 원래 hasClass,addClass,removeClass 함 수 는 요소 의 class 속성 을 배열 로 나 누 어야 합 니 다.1.4.4 버 전에 서\t 또는\t 를 통 해 구분 하고 1.5 에\r 를 추가 하여 Windows 플랫폼 의 줄 바 꿈 문자(\r)에 대응 합 니 다.jQuery.fn.attr 함수,1.4.4 버 전에 서 TextNode 와 CommentNode 에서 속성 을 가 져 오 는 것 을 거부 하고 1.5 버 전에 AttributeNode(noteType==2)를 추가 하 였 습 니 다.1.4.4 버 전에 서 jQuery 는 페이지 unload 에서 jQuery 가 유지 하 는 모든 DOM 사건 을 제거 합 니 다.이것 은 IE 의 메모리 유출 문 제 를 피하 기 위해 서 입 니 다.그런데 1.5 에서 이 코드 가 없어 졌어 요.무슨 생각 인지 모 르 겠 어 요.IE 에서 cloneNode 를 사용 하여 노드 를 복사 하면 사건 도 함께 복사 하 는 문제 에 대해 1.4.4 에 서 는 innerHTML 을 복사 하 는 방식 으로 해결 하고 1.5 에 서 는 mootools 팀 이 제공 하 는 방법 을 채택 하여 clone Fix Attribute 함수 로 이 문 제 를 수정 합 니 다.clone Fix Attribute 함수 들 은 jQuery 1.5 beta 1 소스 파일 의 5388-5438 줄 에서 IE 의 BUG 를 처리 하 는 원 리 는 매우 간단 하 다.물론 전단 에 간단 해 보 이 는 것들 은 모두 발견 하기 어렵다.IE 에 clearAttributes 라 는 함수 가 있 는데 노드 의 모든 속성 을 제거 하 는 동시에 사건 과 관련 된 onclick 과 같은 속성 도 제거 할 수 있다.복 사 된 노드 에서 이 함 수 를 호출 하면 속성 을 깨끗하게 할 수 있 습 니 다.IE 에는 mergeAttributes 라 는 함수 가 있 습 니 다.한 노드 의 속성 을 다른 노드 에 복사 하지만 이벤트 와 관련 된 속성 을 복사 하지 않 습 니 다.그래서 원본 노드 를 mergeAttributes 로 호출 하고 복사 한 노드 에 속성 을 다시 넣 으 면 이벤트 관련 속성 을 제거 하 는 역할 을 합 니 다.또한 clone Fix Attribute 함 수 는 매우 많은 IE6-8 이 clone Node 에서 의 호환성 문 제 를 처리 하여 상세 하 게 연구 할 필요 가 있다.AJAX 파 트 AJAX 는 이미 완전히 리 메 이 크 되 었 고,단 한 점 의 모서리 만 남 겨 1.4.4 버 전의 멋 을 유지 하고 있 으 며,여기 서 일부분 만 뽑 아 간단하게 설명 한다.원래 버 전에 서$.get 과$.post 의 실현 은 매우 비슷 합 니 다.구체 적 으로 하나의 method 설정 항목 만 다 르 기 때문에 1.5 버 전에 서 합 쳐 졌 습 니 다.체인 호출 가능 합 니 다.serializeArray 함 수 는 현재 value 의 줄 바 꿈 자 를 윈도 스타일(\r)로 통일 합 니 다.AJAX 의 리 셋 함수 에 서 는 인자 의 대상 이 원래 의 XML HTTPRequest 가 아니 라 jQuery 가 자체 적 으로 봉 인 된 jXHR 라 는 대상 으로 XML HTTPRequest 의 상용 인 터 페 이 스 를 제공 합 니 다.원래'성공 요청'의 브 라 우 저 상태 코드 는 200-299 와 304 를 제외 하고 1223 이 있 는데 IE 에서 온 BUG 는 204 의 상태 코드 를 1223 으로 바 꿉 니 다.현재 jXHR 대상 이 생 겨 중간 에 한 층 이 더 늘 어 난 셈 이기 때문에 jXHR 대상 에서 status Code 를 받 으 면 1223 상황 이 발생 하지 않 고 204 로 바 뀌 었 다.jQuery.ajax 함수 의 설정 항목 에 status Code 항목 이 하나 더 있 습 니 다.그 구 조 는 map 입 니 다.특정한 상태 코드 를 되 돌 릴 때의 리 셋 함 수 를 지정 하 는 데 사 용 됩 니 다.대체적으로 다음 과 같 습 니 다
var parser = new DOMParser();
var xml = parser.parseFromString(text, 'text/html'); IE, Microsoft.XMLDOM :
var parser = new ActiveXObject('Microsoft.XMLDOM');
parser.async = 'false';
parser.loadXML(text);
var xml = parser.documentElement;
이 리 셋 을 추가 한 후에 jQuery.ajax 함 수 는 이미 매우 많은 리 셋 함수 가 있 습 니 다.그 트리거 과정 은 다음 과 같 습 니 다.되 돌아 오 는 상태 코드 에 따라 success 또는 error 리 셋 을 촉발 합 니 다.상태 코드 에 따라 대응 하 는 status Code 리 셋 을 촉발 합 니 다.complete 리 셋 을 촉발 합 니 다.전역 ajax Complete 리 셋 을 실행 합 니 다.이 때 실행 중인 AJAX 가 없 으 면 전역 ajax Stop 리 셋 을 실행 합 니 다.다른 디 테 일 한 입구 함수 jQuery.fn.init 에 인자 가 하나 더 생 겼 습 니 다.값 은 항상 rootjQuery 입 니 다.init 함수 에서 rootjQuery 변수 에 대한 검색 속 도 를 가속 화 하 는 데 사 용 됩 니 다(역할 영역 을 한 층 줄 였 습 니 다)://jQuery 1.5 beta 1 소스 코드 23 줄 jQuery=function(selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context, rootjQuery ); }jQuery 대상 은 계승 을 지원 합 니 다.구체 적 인 수정 은 jQuery 를 직접 호출 하 는 코드 를 this.constructor 호출 로 바 꾸 는 것 입 니 다.202 줄:return this.constructor(context).find(selector);253 줄:var ret=this.constructor();334 줄:return this.prevObject|this.constructor(null);또한 jQuery.subclass 함 수 를 제공 하여 jQuery 에서 계승 하 는 유형 을 만 드 는 데 사 용 됩 니 다.jQuery 를 자주 사용 하지 않 기 때문에 jQuery 를 계승 해 야 하 는 상황 을 사용 한 적 이 없 기 때문에 이 기능 의 역할 이 얼마나 큰 지 말 하기 도 어렵 습 니 다.