jQuery 소스코드 분석-03 jQuery 객체 구성하기-도구 function_jquery
작성자: nuysoft/Gao Yun QQ: 47214707 이메일: nuysoft@gmail.com
진술: 이 기사는 원본 기사입니다. 재인쇄해야 하는 경우 출처를 표시하고 원본 링크를 유지하세요.
읽고, 읽고, 쓰고, 잘못된 점이 있으면 말씀해 주세요. 이 장의 PDF는 이 장을 마치면 공개될 예정입니다.
jQuery 소스 코드 분석 시리즈의 디렉토리는 http://nuysoft.iteye.com/blog/1177451을 확인하세요. 체계적으로 작성하고 싶다면 관심 있는 부분부터 시작하겠습니다. 어떤 모듈이 궁금하신지 분석을 우선으로 하라고 추천해 주시면 같이 공부해보겠습니다.
3.4 기타 정적 도구 기능
// 유틸리티 함수 확장
jQuery.extend({
// $
의 jQuery 제어 해제// 많은 JavaScript 라이브러리는 $를 함수 또는 변수 이름으로 사용하며 jQuery도 동일합니다. .
// jQuery에서 $는 jQuery의 별칭이므로 $를 사용하지 않아도 모든 기능이 보장됩니다.
// jQuery 외에 다른 JavaScript 라이브러리를 사용해야 하는 경우 $를 호출할 수 있습니다. noConflect()는 라이브러리에 제어권을 반환합니다.
// 이 메소드에 true 매개변수를 전달하면 $ 및 jQuery에 대한 제어권을 다른 JavaScript 라이브러리에 반환할 수 있습니다. // $
if ( window.$ === jQuery ) {
window.$ = _$>}
// jQuery 제어 넘겨주기
if ( deep; && window.jQuery === jQuery ) {
window.jQuery =
}
return jQuery;
},
// DOM을 사용할 준비가 되었나요?
isReady: false,
// 준비 이벤트가 시작되기 전에 기다려야 할 항목 수를 추적하는 카운터
// #6781을 참조하세요.
// 추적하는 데 사용되는 카운터입니다. 준비 이벤트가 트리거되기 전에 대기할 횟수
readyWait: 1,
// 준비 이벤트 보류(또는 해제)
// 계속 기다리거나 트리거
holdReady : function( Hold ) {
if (hold ) {
jQuery.readyWait ;
} else {
jQuery.ready( true )
},
/ / DOM이 준비됨
// 문서가 로드될 때 처리
ready: function( wait ) {
// 보류 또는 DOMready/load 이벤트가 해제되었지만 아직 준비되지 않음
//
if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
// IE가 최소한 본문이 존재하는지 확인하세요. 약간 지나치게 열성적입니다(티켓 #5443).
// document.body가 있는지 확인하세요
if ( !document.body ) {
return setTimeout( jQuery.ready, 1 )
// DOM이 준비되었음을 기억하세요
jQuery.isReady = true
// 일반적인 DOM Ready 이벤트가 발생하면 감소하고 필요한 경우 기다립니다.
if ( wait !== true && - -jQuery.readyWait > 0 ) {
return;
}
// 바인딩된 함수가 있는 경우
readyList.resolveWith( document, [ jQuery ] )/ / 바인딩된 준비 이벤트 트리거
if ( jQuery.fn.trigger ) {
jQuery( document ).trigger( "ready" ).unbind( "ready" )
}
}
},
//readyList 이벤트 처리 함수 대기열 초기화
// 브라우저 간 이벤트 바인딩 차이와 호환 가능
bindReady: function() {
if ( ReadyList ) {
return ;
}
readyList = jQuery._Deferred();
//
// 브라우저 이벤트가 이미 발생한 후에 $(document).ready()가 호출되는 경우를 포착하세요. if ( document.readyState === "complete" ) {
// 스크립트가 준비를 지연할 수 있도록 비동기적으로 처리합니다.
return setTimeout( jQuery.ready, 1 )
}
/ / Mozilla, Opera 및 webkit nightlies는 현재 이 이벤트를 지원합니다
// 브라우저를 스니핑하는 대신 브라우저의 기능을 감지하여 호환 가능한 이벤트
if ( document.addEventListener ) {
// 편리한 이벤트 콜백 사용
// 더 빠른 로딩 이벤트 사용
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false )
// 항상 작동하는 window.onload 대체
/ / 창 등록. onload 콜백 함수
window.addEventListener( "load", jQuery.ready, false )
// IE 이벤트 모델을 사용하는 경우
} else if ( document.attachEvent ) {
// 보장 onload 전에 실행,
// 늦을 수 있지만 iframe에도 안전합니다.
// onload 전에 onreadystatechange가 트리거되는지 확인하세요. 이는 iframe에 대해 느리지만 안전할 수 있습니다.
document.attachEvent( "onreadystatechange" , DOMContentLoaded );
// 항상 작동하는 window.onload 대체
// window.onload 콜백 함수 등록
window.attachEvent( "onload", jQuery.ready )
// IE인 경우 프레임이 아님
//문서가 준비되었는지 계속 확인하세요
var toplevel = false
try {
toplevel = window.frameElement ==
} catch(e ) {}
if ( document.documentElement.doScroll && toplevel ) {
doScrollCheck()
}
}
},
// test/unit /core.js 참조 isFunction에 관한 자세한 내용은
// 버전 1.3부터 경고
//와 같은 DOM 메서드는 지원되지 않습니다. (#2968)// 함수 여부
isFunction: function( obj) {
return jQuery.type(obj) === "function";
},
// 배열인지 여부
// 브라우저에 내장된 경우- Array.isArray를 구현하려면 브라우저 자체 구현을 사용하세요.
// 그렇지 않으면 개체를 문자열로 변환하여 "[object Array]"인지 확인하세요.
isArray: Array.isArray || function( obj ) {
return jQuery.type(obj) === "array";
},
// 객체인지 확인하는 대략적인 방법 창인지
// 간단한 판단(setInterval 속성 판단) 창 개체
isWindow: function( obj ) {
return obj && typeof obj === "object" && "setInterval" in obj ;
},
// 예약어 NaN인지 여부
isNaN: function( obj ) {
// null과 같거나 숫자가 아니거나 window.isNaN을 호출하여 판단
return obj == null | !rdigit.test( obj ) || isNaN( obj )
},
// 객체 유형 가져오기
function( obj ) {
/ / 핵심 API를 통해 개체를 생성합니다. 새 키워드가 필요하지 않습니다.
// 일반 기능은 작동하지 않습니다.
// Object.prototype.toString 메서드를 호출하여 "[object Xxx]" 형식의 문자열을 생성합니다.
// class2type[ "[object " name "]" ] = name.toLowerCase();
return obj == null
String( obj ) :
class2type[ toString.call(obj ) ] || "object";
} ,
// obj가 순수 객체("{}" 또는 "new Object"를 통해 생성된 객체)인지 확인하세요.
// console.info( $. isPlainObject( {} ) ); // true
// console.info( $.isPlainObject( '' ) ) // false
// console.info( $.isPlainObject( document.location ) ); // true
// console.info( $.isPlainObject( document ) ); // false
// console.info( $.isPlainObject( new Date() ) ) // false / console.info( $.isPlainObject( ) ); // false
// isPlainObject 분석 및 재구성 http://www.jb51.net/article/25047.htm
// jQuery.isPlainObject() 이해하기 http://www.cnblogs .com/phpmix/articles/1733599.html
isPlainObject: function( obj ) {
// 객체여야 합니다.
// IE 때문에 우리도 그래야 합니다. 생성자 속성이 있는지 확인하세요.
// DOM 노드와 창 개체도 통과하지 않는지 확인하세요.
// 개체여야 합니다.
// 불법 포인터 예외가 발생하므로 IE8에서 발생하면 생성자는 속성
//DOM 노드 및 창 개체를 확인해야 하며 false를 반환합니다.
// obj가 존재하지 않거나 개체 유형이 아니거나 DOM 노드 또는 widnow 개체입니다. 직접 false를 반환합니다. 🎜>// 다음 세 가지 가능한 상황을 테스트합니다.
// jQuery.type(obj) !== "object" 유형이 객체가 아니므로 무시하세요.
// obj.nodeType은 DOM 노드가 객체가 아니라고 생각합니다. 순수 객체
// jQuery.isWindow(obj)는 window가 순수 객체가 아니라고 생각합니다. Object
if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
return false;
}
// 소유하지 않은 생성자 속성은 Object여야 합니다.
// 테스트 생성자 속성
// 생성자 함수 생성자가 있습니다. 하지만 자체 속성은 아닙니다(즉, 프로토타입을 통해 상속됨).
if ( obj.constructor &&
!hasOwn.call(obj, "constructor") &&
!hasOwn.call(obj. constructor.prototype, "isPrototypeOf") ) {
return false;
}
// 속도를 높이기 위해 소유한 속성이 먼저 열거됩니다.
// 마지막 속성이 소유한 경우 모든 속성이 나열됩니다.
var key;
for ( key in obj ) {}
// key === 정의되지 않았으며 속성이 없으며 단순한 순수 객체로 간주됩니다
// .call( obj, key ) 속성 키가 비어 있지 않고 속성 키의 객체가 자체적입니다(즉, 프로토타입을 통해 상속되지 않음)
return key === undefine || hasOwn.call( obj, key );
},
// 객체가 비어 있는지 여부
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false; }
return true;
},
// 예외 발생
error: function( msg ) {
throw msg;
},
// JSON 구문 분석 >//parseJSON은 문자열을 JSON 객체로 변환합니다.
// 일반적으로 eval을 사용합니다. ParseJSON은 이 작업을 캡슐화하지만 eval은 최후의 수단으로 사용됩니다.
// 최신 JavaScript 표준에 JSON 직렬화 및 역직렬화 API가 추가되었기 때문입니다.
// 브라우저가 이 표준을 지원한다면 이 두 API는 Native Code를 사용하여 JS 엔진에 구현되며 효율성은 확실히 eval보다 훨씬 높습니다.
// 현재 Chrome과 Firefox4 모두 이 API를 지원합니다.
parseJSON: function( data ) {
if ( typeof data !== "string" || !data ) {
return null;
}
// 선행/후행 공백을 확인하세요. 제거됨(IE에서는 처리할 수 없음)
data = jQuery.trim( data )
// 먼저 기본 JSON 파서를 사용하여 구문 분석을 시도합니다.
// 기본 JSON API. 역직렬화는 JSON.stringify(object)
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data )
}
// 들어오는지 확인하세요. 데이터는 실제 JSON입니다
// http://json.org/json2.js에서 가져온 논리
// ... 대략적으로 문자열 유효성을 확인하세요
if ( rvalidchars.test( data.replace( rvalidescape , "@" )
.replace( rvalidtokens, "]" )
.replace( rvalidbraces, "")) ) {
return (new Function( "return " data ))
}
jQuery.error( "잘못된 JSON: " data );
},
// 브라우저 간 XML 구문 분석
// (xml 및 tmp가 내부적으로 사용됨)
// 구문 분석 XML 크로스 브라우저
//parseXML 함수도 주로 표준 API 및 IE의 패키지입니다.
//표준 API는 DOMParser 개체입니다.
// IE는 Microsoft.XMLDOM의 ActiveXObject 개체를 사용합니다.
parseXML: function( data , xml , tmp ) {
if ( window.DOMParser ) { // 표준 표준 XML 파서
tmp = new DOMParser()
xml = tmp.parseFromString( data , "text/xml" );
} else { // IE IE의 XML 파서
xml = new ActiveXObject( "Microsoft.XMLDOM" )
xml.async = "false"; .loadXML( 데이터 );
}
tmp = xml.documentElement;
if ( !tmp || !tmp.nodeName || tmp.nodeName === "parsererror" ) {
jQuery. error( "잘못된 XML: " 데이터 );
}
return xml;
},
// No-op 함수
noop: function() {},
// 글로벌 컨텍스트에서 스크립트를 평가합니다.
// Jim Driscoll의 조사 결과를 기반으로 한 해결 방법
// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval- javascript- global-context
// globalEval 함수는 스크립트를 전역 컨텍스트(창)에 로드합니다.
// window.execScript는 IE에서 사용할 수 있습니다.
// 다른 브라우저에서는 eval을 사용해야 합니다.
// 전체 jQuery 코드는 전체 익명 함수이므로 현재 컨텍스트는 jQuery입니다. 컨텍스트를 window로 설정하려면 globalEval을 사용해야 합니다.
globalEval: function( data ) {
// 데이터가 비어 있지 않습니다
if ( data && rnotwhite.test( data ) ) {
// Internet Explorer에서 execScript를 사용합니다
// 우리는 Firefox
( window.execScript || function( data ) {
window[ "eval" ].call( window, data ) 에서 context가 jQuery가 아닌 window
//가 되도록 익명 함수를 사용합니다. ;
} )( data );
}
},
// 노드 이름이 동일한지 확인
nodeName: function( elem, name ) {
// 무시 case
return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
},
// args는 내부 용도로만 사용됩니다.
// 객체 또는 배열 탐색
각각: function( object, callback, args ) {
var name, i = 0,
length = object.length,
isObj = length === 정의되지 않음 || );
// 매개변수 args가 있는 경우 적용을 호출하고 컨텍스트는 현재 탐색된 객체로 설정되며 매개변수는 args입니다.
if ( args ) {
if ( isObj ) {
for ( 객체의 이름 ) {
if ( callback.apply( object[ name ], args ) === false ) {
break
}
}
} else {
for ( ; i if ( callback.apply( object[ i ], args ) === false ) {
break;
}
}
}
// 각 항목을 가장 일반적으로 사용하는 특별하고 빠른 사례
// 매개변수 인수가 없으면 호출이 호출되고 컨텍스트는 현재 탐색된 객체로 설정되고 매개변수는 키로 설정됩니다. /index 및 값
} else {
if ( isObj ) {
for ( name in object ) {
if ( callback.call( object[ name ], name, object[ name ] ) = == false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.call( object[ i ] , i, object[ i ] ) === false ) {
break;
}
}
}
}
return object; / 가능하면 기본 String.trim 함수를 사용하세요.
// 가능한 한 로컬 String.trim 메서드를 사용하세요. 그렇지 않으면 선행 공백을 먼저 필터링한 다음 후행 공백을 필터링합니다.
trim: Trim ? ( text ) {
return text == null ?
"" :
trim.call( text )
} :
// 그렇지 않으면 자체 트리밍 기능을 사용하세요
function( text ) {
return text == null ?
"" :
text.toString().replace( TrimLeft, "" ).replace( TrimRight, "" ),
// 결과는 내부용입니다.
// 의사 배열을 배열로 변환
makeArray: function( array, results ) {
var ret = results ||
if ( array ! = null ) {
// 창, 문자열(및 함수)에도 '길이'가 있습니다
// 추가 유형의 함수 검사는 충돌을 방지하기 위한 것입니다
// Safari 2(참조: #3039)
// Blackberry 4.7 RegExp 문제를 처리하기 위해 논리를 약간 조정했습니다. #6930
// 많은 브라우저 호환성 테스트, 정말 고통스럽습니다.
var type = jQuery.type( array )// 테스트: 길이 속성, 문자열, 함수, 정규
//는 배열도 아니고 의사 배열도 아닙니다.
if ( array.length == null
|| type === "string"
|| 유형 === "함수"
|| 유형 === "regexp"
|| jQuery.isWindow( array ) ) {
push.call( ret, array ); 🎜>} else {
// $.type ( $('div') ) // 객체
jQuery.merge( ret, array )
}
}
return ret;
},
//
inArray: function( elem, array ) {
// 현지화된 Array.prototype.indexOf가 있습니까
if ( indexOf ) {
// 직접 call Array.prototype.indexOf
return indexOf.call(array, elem);
}
// 배열을 탐색하여 정확히 동일한 요소가 있는지 찾아 아래 첨자를 반환합니다.
// 팁 루핑의 경우: array.length를 길이 변수에 저장하면 하나의 범위 검색을 줄일 수 있습니다.
for ( var i = 0, length = array.length; i < length; i ) {
if ( array[ i ] === elem ) {
return i;
}
}
// -1이 반환되면 배열에 없음을 의미합니다.
return -1; },
// 두 번째 배열을 첫 번째 배열로 병합
merge: function( first, second ) {
var i = first.length, //
j = 0
// If second의 길이 속성은 Number 유형이며, second를 배열로 처리합니다. j ) {
first[ i ] = second[ j ] ;
}
} else {
// 두 번째를 탐색하고 정의되지 않은 값을 첫 번째
에 추가 while ( second[ j] !== 정의되지 않음 ) {
first[ i ] = second[ j ];
}
}
// first의 길이 속성을 수정하세요. 왜냐하면 first는 실제 배열이 아닐 수 있기 때문입니다.
first.length = i;
return first;
},
// 배열을 필터링하고 새 배열을 반환합니다. 콜백이 true를 반환하면 유지됩니다. 콜백이 false를 반환하는 경우
grep: function( elems, callback, inv ) {
var ret = [], retVal;
inv = !!inv>// 저장만 수행
// 유효성 검사 함수를 전달하는 항목
// 배열을 탐색하고 통과한 항목만 저장합니다. 함수 콜백의 요소를 확인합니다
for ( var i = 0, length = elems.length; i < length; i ) {
// 여기서 콜백의 매개변수 목록은 각
retVal = !!callback( elems[ i ], i )의 습관과 일치하는 값, 인덱스입니다. ;
// 선택을 취소할지 여부
if ( inv !== retVal ) {
ret.push( elems[ i ] ) ;
}
}
return ret;
},
// arg는 내부 용도로만 사용됩니다.
// 배열 또는 객체 요소의 요소/속성을 새 배열로 변환합니다.
map: function( elems, callback, arg ) {
var value, key, ret = [],
i = 0,
length = elems.length,
// jquery 객체는 배열로 처리됩니다
// elems가 (의사) 배열인지 감지
// 1. jQuery 객체를 배열로 처리합니다
// 2. 길이 속성이 있는지, 길이가 0인지, 첫 번째 요소와 마지막 요소가 있는지, jQuery.isArray가 true를 반환하는지 확인합니다
isArray = jQuery의 요소 인스턴스
|| length !== 정의되지 않음 && typeof length === "number"
&& ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
// 배열인지 객체인지의 차이일 뿐이고 다른 점은 없습니다
// 배열, 각 항목을 해당
으로 변환// 배열을 탐색하고, 각 요소에 대한 콜백을 호출하고, null이 아닌 반환 값을 ret에 저장합니다.
if ( isArray ) {
for ( ; i < length; i ) {
// 콜백 실행, 매개변수는 value, index, arg 순서입니다.
value = callback( elems[ i ], i, arg )// null인 경우 반환, 무시(반환 없음 값 함수는 정의되지 않음을 반환함)
if ( value != null ) {
ret[ ret.length ] = value
}
}
// Go 객체의 모든 키를 통해
// 객체를 탐색하고, 각 속성에 대해 콜백을 호출하고, null이 아닌 반환 값을 ret에 저장합니다
} else {
for( key in elems ) {
// 콜백 실행, 매개변수는 value, key, arg 순서로
value = callback( elems[ key ], key, arg )
// 위와 동일
if ( value != null ) {
ret[ ret .length ] = value;
}
}
}
// 중첩 배열 평면화
// 중첩 배열 평면화
// concat:
// 항목이 배열인 경우 해당 내용을 끝에 추가합니다.
// 항목이 배열이 아닌 경우 배열 끝에 단일 배열 요소로 추가합니다.
return ret.concat.apply( [], ret );
},
// 객체에 대한 전역 GUID 카운터
guid: 1,
// 컨텍스트에 함수 바인딩 , 선택적으로
// 인수를 부분적으로 적용합니다.
// 프록시 메서드: fn에 대한 컨텍스트 지정(예: this)
// jQuery.proxy( function, context)
// jQuery.proxy( context, name )
proxy: function( fn, context ) {
// context가 문자열인 경우 context를 fn으로 설정하고 fn은 fn[ context ]
// 즉, fn의 context 메소드 컨텍스트는 fn입니다(이것이 기본값이 아닌가요???TODO)
if ( typeof context === "string" ) {
var tmp = fn[ context ]
context = fn
fn = tmp; / 사양에서 대상이 호출 가능한지 빠르게 확인합니다.
// TypeError가 발생하지만 정의되지 않은 상태가 반환됩니다.
// 사양에서 대상이 호출 가능한지 확인하는 빠른 확인입니다. , TypeError가 발생합니다.
// 하지만 여기서는 정의되지 않은 값만 반환합니다.
if ( !jQuery.isFunction( fn ) ) {
return undefine;
}
// 시뮬레이션된 바인딩
var args = 슬라이스.call( 인수, 2 ), // 매개변수 목록에서 fn,context 제거
proxy = function() {
// 컨텍스트를 컨텍스트 및 매개변수로 설정
return fn .apply ( context, args.concat( Slice.call( 인수 ) ) );
};
// 고유 핸들러의 guid를 원래 핸들러와 동일하게 설정하여 제거할 수 있습니다
/ / Unify 프록시를 제거할 수 있는 guid
proxy.guid = fn.guid = fn.guid || jQuery.guid ;
return Proxy
/ / 다기능 메서드 컬렉션에 값을 가져오고 설정하려면
// 값이 함수인 경우 선택적으로 실행될 수 있습니다.
// 다기능 함수, 컬렉션의 속성 값을 읽거나 설정합니다.
// fn: jQuery.fn.css, jQuery.fn.attr, jQuery.fn.prop
access: function( elems, key, value, exec, fn, pass ) {
var length = elems.length;
// 많은 속성 설정
// 여러 속성이 있는 경우 반복
if ( typeof key === "object" ) {
for ( var k in key ) {
jQuery.access( elems, k, key[k], exec, fn, value )
}
return elems;
}
// 하나의 속성 설정
// 하나의 속성만 설정
if ( value !== undefine ) {
// 선택적으로 exec가 true인 경우 함수 값이 실행됩니다.
exec = !pass && exec && jQuery.isFunction ( value);
for ( var i = 0; i fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems [ i], key ) ) : value, pass );
}
return elems;
}
// 속성 가져오기
// 속성 읽기
반환 길이 ? elems[0], key ) : 정의되지 않음
},
// 현재 시간을 가져오는 편리한 함수
now: function() {
return (new Date()).getTime() ;
},
// jQuery.browser 사용은 눈살을 찌푸리게 합니다.
// 자세한 내용: http://docs.jquery.com/Utilities/jQuery.browser
// jQuery.browser는 더 이상 사용되지 않으므로 jQuery.support를 사용하는 것이 좋습니다.
// 사용 중인 브라우저에 대한 Navigator 정보
// Navigator.userAgent에서 사용하는 사용자 에이전트 헤더의 값을 선언하는 읽기 전용 문자열입니다. HTTP 요청용 브라우저
uaMatch: function( ua ) {
ua = ua.toLowerCase();
// 각 브라우저를 차례로 일치
var match = rwebkit.exec( ua ) || 🎜>ropera.exec( ua ) ||
rmsie.exec( ua ) ||
ua.indexOf("호환") < rmozilla.exec( ua ) ||
/ / match[1] || ""
// match[1]이 false인 경우(빈 문자열, null, 정의되지 않음, 0 등) 기본값은 ""입니다.
// match [2] || " 0"
// match[2]가 false인 경우(빈 문자열, null, 정의되지 않음, 0 등) 기본값은 "0"입니다.
return { 브라우저: match[1 ] || "", version: match[2] || "0" };
},
// jQuery의 새 복사본을 만듭니다. jQuery 객체는 영향을 받지 않습니다
// 두 가지 사용법이 있습니다:
// 1. 원래 메소드를 파괴하지 않고 jQuery 메소드를 대체합니다
// 2. 네임스페이스 충돌을 피하기 위해 캡슐화하고 jQuery를 개발하는 데 사용할 수 있습니다. 플러그인
// 주목할 만한 점은 jQuery.sub() 함수가 실제 격리를 제공하지 않는다는 것입니다. 모든 속성과 메소드는 여전히 원래 jQuery를 가리킵니다.
// 이 메소드를 사용하여 플러그인을 개발하는 경우 ins에서는 jQuery UI 위젯 프로젝트에 우선순위를 부여하는 것이 좋습니다
sub : function() {
function jQuerySub( selector, context ) {
return new jQuerySub.fn.init( selector, context );
}
jQuery.extend( true, jQuerySub, this ); // jQuery의 모든 속성과 메서드를 jQuerySub에 복사합니다.
jQuerySub.superclass =
jQuerySub.fn = jQuerySub. 프로토타입 = this(); //
jQuerySub.fn.constructor = jQuerySub;
jQuerySub.sub = this.sub;
jQuerySub.fn.init = function init( selector, context ) {
if ( context && context objectof jQuery && !(context instanceof jQuerySub) ) {
context = jQuerySub( context )
}
return jQuery.fn.init.call( this, selector, context, rootjQuerySub ) ;
};
jQuerySub.fn.init.fn;
var rootjQuerySub(document)
return jQuerySub; 및 버전:
// $.browser.msie/mozilla/ webkit/opera
// $.browser.version
// jQuery.browser 브라우저 유형을 스니핑하는 것은 권장되지 않지만 브라우저의 기능적 특징 jQuery.support
// 향후 jQuery.browser는 플러그인
브라우저: {}
})으로 이동될 예정입니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











jQuery 참조 방법에 대한 자세한 설명: 빠른 시작 가이드 jQuery는 웹 사이트 개발에 널리 사용되는 JavaScript 라이브러리로, JavaScript 프로그래밍을 단순화하고 개발자에게 풍부한 기능을 제공합니다. 이 기사에서는 jQuery의 참조 방법을 자세히 소개하고 독자가 빠르게 시작할 수 있도록 구체적인 코드 예제를 제공합니다. jQuery 소개 먼저 HTML 파일에 jQuery 라이브러리를 도입해야 합니다. CDN 링크를 통해 소개하거나 다운로드할 수 있습니다.

jQuery에서 PUT 요청 방법을 사용하는 방법은 무엇입니까? jQuery에서 PUT 요청을 보내는 방법은 다른 유형의 요청을 보내는 것과 유사하지만 몇 가지 세부 사항과 매개 변수 설정에 주의해야 합니다. PUT 요청은 일반적으로 데이터베이스의 데이터 업데이트 또는 서버의 파일 업데이트와 같은 리소스를 업데이트하는 데 사용됩니다. 다음은 jQuery에서 PUT 요청 메소드를 사용하는 구체적인 코드 예제입니다. 먼저 jQuery 라이브러리 파일을 포함했는지 확인한 다음 $.ajax({u를 통해 PUT 요청을 보낼 수 있습니다.

jQuery를 사용하여 요소의 높이 속성을 제거하는 방법은 무엇입니까? 프런트엔드 개발에서는 요소의 높이 속성을 조작해야 하는 경우가 종종 있습니다. 때로는 요소의 높이를 동적으로 변경해야 할 수도 있고 요소의 높이 속성을 제거해야 하는 경우도 있습니다. 이 기사에서는 jQuery를 사용하여 요소의 높이 속성을 제거하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. jQuery를 사용하여 높이 속성을 연산하기 전에 먼저 CSS의 높이 속성을 이해해야 합니다. height 속성은 요소의 높이를 설정하는 데 사용됩니다.

제목: jQuery 팁: 페이지에 있는 모든 태그의 텍스트를 빠르게 수정하세요. 웹 개발에서는 페이지의 요소를 수정하고 조작해야 하는 경우가 많습니다. jQuery를 사용할 때 페이지에 있는 모든 태그의 텍스트 내용을 한 번에 수정해야 하는 경우가 있는데, 이는 시간과 에너지를 절약할 수 있습니다. 다음은 jQuery를 사용하여 페이지의 모든 태그 텍스트를 빠르게 수정하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 먼저 jQuery 라이브러리 파일을 도입하고 다음 코드가 페이지에 도입되었는지 확인해야 합니다. <

jQuery는 프런트엔드 개발에 널리 사용되는 빠르고, 작고, 기능이 풍부한 JavaScript 라이브러리입니다. 2006년 출시 이후 jQuery는 많은 개발자가 선택하는 도구 중 하나가 되었지만 실제 애플리케이션에서는 몇 가지 장점과 단점도 있습니다. 이 기사에서는 jQuery의 장점과 단점을 심층적으로 분석하고 구체적인 코드 예제를 통해 설명합니다. 장점: 1. 간결한 구문 jQuery의 구문 디자인은 간결하고 명확하여 코드의 가독성과 쓰기 효율성을 크게 향상시킬 수 있습니다. 예를 들어,

제목: jQuery를 사용하여 모든 태그의 텍스트 내용을 수정합니다. jQuery는 DOM 작업을 처리하는 데 널리 사용되는 인기 있는 JavaScript 라이브러리입니다. 웹 개발을 하다 보면 페이지에 있는 링크 태그(태그)의 텍스트 내용을 수정해야 하는 경우가 종종 있습니다. 이 기사에서는 jQuery를 사용하여 이 목표를 달성하는 방법을 설명하고 구체적인 코드 예제를 제공합니다. 먼저 페이지에 jQuery 라이브러리를 도입해야 합니다. HTML 파일에 다음 코드를 추가합니다.

jQuery 요소에 특정 속성이 있는지 어떻게 알 수 있나요? jQuery를 사용하여 DOM 요소를 조작할 때 요소에 특정 속성이 있는지 확인해야 하는 상황이 자주 발생합니다. 이 경우 jQuery에서 제공하는 메소드를 사용하여 이 기능을 쉽게 구현할 수 있습니다. 다음은 jQuery 요소에 특정 속성이 있는지 확인하기 위해 일반적으로 사용되는 두 가지 방법을 특정 코드 예제와 함께 소개합니다. 방법 1: attr() 메서드와 typeof 연산자를 // 사용하여 요소에 특정 속성이 있는지 확인

jQuery는 웹 페이지에서 DOM 조작 및 이벤트 처리를 처리하는 데 널리 사용되는 인기 있는 JavaScript 라이브러리입니다. jQuery에서 eq() 메서드는 지정된 인덱스 위치에서 요소를 선택하는 데 사용됩니다. 구체적인 사용 및 적용 시나리오는 다음과 같습니다. jQuery에서 eq() 메서드는 지정된 인덱스 위치에 있는 요소를 선택합니다. 인덱스 위치는 0부터 계산되기 시작합니다. 즉, 첫 번째 요소의 인덱스는 0이고 두 번째 요소의 인덱스는 1입니다. eq() 메소드의 구문은 다음과 같습니다: $("s
