⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jquery.js

📁 jQuery即学即用
💻 JS
📖 第 1 页 / 共 5 页
字号:
/*! * jQuery JavaScript Library v1.4.2 * http://jquery.com/ * * Copyright 2010, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2010, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Sat Feb 13 22:33:48 2010 -0500 */(function( window, undefined ) {// Define a local copy of jQueryvar jQuery = function( selector, context ) {		// The jQuery object is actually just the init constructor 'enhanced'		return new jQuery.fn.init( selector, context );	},	// Map over jQuery in case of overwrite	_jQuery = window.jQuery,	// Map over the $ in case of overwrite	_$ = window.$,	// Use the correct document accordingly with window argument (sandbox)	document = window.document,	// A central reference to the root jQuery(document)	rootjQuery,	// A simple way to check for HTML strings or ID strings	// (both of which we optimize for)	quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,	// Is it a simple selector	isSimple = /^.[^:#\[\.,]*$/,	// Check if a string has a non-whitespace character in it	rnotwhite = /\S/,	// Used for trimming whitespace	rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,	// Match a standalone tag	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,	// Keep a UserAgent string for use with jQuery.browser	userAgent = navigator.userAgent,	// For matching the engine and version of the browser	browserMatch,		// Has the ready events already been bound?	readyBound = false,		// The functions to execute on DOM ready	readyList = [],	// The ready event handler	DOMContentLoaded,	// Save a reference to some core methods	toString = Object.prototype.toString,	hasOwnProperty = Object.prototype.hasOwnProperty,	push = Array.prototype.push,	slice = Array.prototype.slice,	indexOf = Array.prototype.indexOf;jQuery.fn = jQuery.prototype = {	init: function( selector, context ) {		var match, elem, ret, doc;		// Handle $(""), $(null), or $(undefined)		if ( !selector ) {			return this;		}		// Handle $(DOMElement)		if ( selector.nodeType ) {			this.context = this[0] = selector;			this.length = 1;			return this;		}				// The body element only exists once, optimize finding it		if ( selector === "body" && !context ) {			this.context = document;			this[0] = document.body;			this.selector = "body";			this.length = 1;			return this;		}		// Handle HTML strings		if ( typeof selector === "string" ) {			// Are we dealing with HTML string or an ID?			match = quickExpr.exec( selector );			// Verify a match, and that no context was specified for #id			if ( match && (match[1] || !context) ) {				// HANDLE: $(html) -> $(array)				if ( match[1] ) {					doc = (context ? context.ownerDocument || context : document);					// If a single string is passed in and it's a single tag					// just do a createElement and skip the rest					ret = rsingleTag.exec( selector );					if ( ret ) {						if ( jQuery.isPlainObject( context ) ) {							selector = [ document.createElement( ret[1] ) ];							jQuery.fn.attr.call( selector, context, true );						} else {							selector = [ doc.createElement( ret[1] ) ];						}					} else {						ret = buildFragment( [ match[1] ], [ doc ] );						selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;					}										return jQuery.merge( this, selector );									// HANDLE: $("#id")				} else {					elem = document.getElementById( match[2] );					if ( elem ) {						// Handle the case where IE and Opera return items						// by name instead of ID						if ( elem.id !== match[2] ) {							return rootjQuery.find( selector );						}						// Otherwise, we inject the element directly into the jQuery object						this.length = 1;						this[0] = elem;					}					this.context = document;					this.selector = selector;					return this;				}			// HANDLE: $("TAG")			} else if ( !context && /^\w+$/.test( selector ) ) {				this.selector = selector;				this.context = document;				selector = document.getElementsByTagName( selector );				return jQuery.merge( this, selector );			// HANDLE: $(expr, $(...))			} else if ( !context || context.jquery ) {				return (context || rootjQuery).find( selector );			// HANDLE: $(expr, context)			// (which is just equivalent to: $(context).find(expr)			} else {				return jQuery( context ).find( selector );			}		// HANDLE: $(function)		// Shortcut for document ready		} else if ( jQuery.isFunction( selector ) ) {			return rootjQuery.ready( selector );		}		if (selector.selector !== undefined) {			this.selector = selector.selector;			this.context = selector.context;		}		return jQuery.makeArray( selector, this );	},	// Start with an empty selector	selector: "",	// The current version of jQuery being used	jquery: "1.4.2",	// The default length of a jQuery object is 0	length: 0,	// The number of elements contained in the matched element set	size: function() {		return this.length;	},	toArray: function() {		return slice.call( this, 0 );	},	// Get the Nth element in the matched element set OR	// Get the whole matched element set as a clean array	get: function( num ) {		return num == null ?			// Return a 'clean' array			this.toArray() :			// Return just the object			( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );	},	// Take an array of elements and push it onto the stack	// (returning the new matched element set)	pushStack: function( elems, name, selector ) {		// Build a new jQuery matched element set		var ret = jQuery();		if ( jQuery.isArray( elems ) ) {			push.apply( ret, elems );				} else {			jQuery.merge( ret, elems );		}		// Add the old object onto the stack (as a reference)		ret.prevObject = this;		ret.context = this.context;		if ( name === "find" ) {			ret.selector = this.selector + (this.selector ? " " : "") + selector;		} else if ( name ) {			ret.selector = this.selector + "." + name + "(" + selector + ")";		}		// Return the newly-formed element set		return ret;	},	// Execute a callback for every element in the matched set.	// (You can seed the arguments with an array of args, but this is	// only used internally.)	each: function( callback, args ) {		return jQuery.each( this, callback, args );	},		ready: function( fn ) {		// Attach the listeners		jQuery.bindReady();		// If the DOM is already ready		if ( jQuery.isReady ) {			// Execute the function immediately			fn.call( document, jQuery );		// Otherwise, remember the function for later		} else if ( readyList ) {			// Add the function to the wait list			readyList.push( fn );		}		return this;	},		eq: function( i ) {		return i === -1 ?			this.slice( i ) :			this.slice( i, +i + 1 );	},	first: function() {		return this.eq( 0 );	},	last: function() {		return this.eq( -1 );	},	slice: function() {		return this.pushStack( slice.apply( this, arguments ),			"slice", slice.call(arguments).join(",") );	},	map: function( callback ) {		return this.pushStack( jQuery.map(this, function( elem, i ) {			return callback.call( elem, i, elem );		}));	},		end: function() {		return this.prevObject || jQuery(null);	},	// For internal use only.	// Behaves like an Array's method, not like a jQuery method.	push: push,	sort: [].sort,	splice: [].splice};// Give the init function the jQuery prototype for later instantiationjQuery.fn.init.prototype = jQuery.fn;jQuery.extend = jQuery.fn.extend = function() {	// copy reference to target object	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;	// Handle a deep copy situation	if ( typeof target === "boolean" ) {		deep = target;		target = arguments[1] || {};		// skip the boolean and the target		i = 2;	}	// Handle case when target is a string or something (possible in deep copy)	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {		target = {};	}	// extend jQuery itself if only one argument is passed	if ( length === i ) {		target = this;		--i;	}	for ( ; i < length; i++ ) {		// Only deal with non-null/undefined values		if ( (options = arguments[ i ]) != null ) {			// Extend the base object			for ( name in options ) {				src = target[ name ];				copy = options[ name ];				// Prevent never-ending loop				if ( target === copy ) {					continue;				}				// Recurse if we're merging object literal values or arrays				if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {					var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src						: jQuery.isArray(copy) ? [] : {};					// Never move original objects, clone them					target[ name ] = jQuery.extend( deep, clone, copy );				// Don't bring in undefined values				} else if ( copy !== undefined ) {					target[ name ] = copy;				}			}		}	}	// Return the modified object	return target;};jQuery.extend({	noConflict: function( deep ) {		window.$ = _$;		if ( deep ) {			window.jQuery = _jQuery;		}		return jQuery;	},		// Is the DOM ready to be used? Set to true once it occurs.	isReady: false,		// Handle when the DOM is ready	ready: function() {		// Make sure that the DOM is not already loaded		if ( !jQuery.isReady ) {			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).			if ( !document.body ) {				return setTimeout( jQuery.ready, 13 );			}			// Remember that the DOM is ready			jQuery.isReady = true;			// If there are functions bound, to execute			if ( readyList ) {				// Execute all of them				var fn, i = 0;				while ( (fn = readyList[ i++ ]) ) {					fn.call( document, jQuery );				}				// Reset the list of functions				readyList = null;			}			// Trigger any bound ready events			if ( jQuery.fn.triggerHandler ) {				jQuery( document ).triggerHandler( "ready" );			}		}	},		bindReady: function() {		if ( readyBound ) {			return;		}		readyBound = true;		// Catch cases where $(document).ready() is called after the		// browser event has already occurred.		if ( document.readyState === "complete" ) {			return jQuery.ready();		}		// Mozilla, Opera and webkit nightlies currently support this event		if ( document.addEventListener ) {			// Use the handy event callback			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );						// A fallback to window.onload, that will always work			window.addEventListener( "load", jQuery.ready, false );		// If IE event model is used		} else if ( document.attachEvent ) {			// ensure firing before onload,			// maybe late but safe also for iframes			document.attachEvent("onreadystatechange", DOMContentLoaded);						// A fallback to window.onload, that will always work			window.attachEvent( "onload", jQuery.ready );			// If IE and not a frame			// continually check to see if the document is ready			var toplevel = false;			try {				toplevel = window.frameElement == null;			} catch(e) {}			if ( document.documentElement.doScroll && toplevel ) {				doScrollCheck();			}		}	},	// See test/unit/core.js for details concerning isFunction.	// Since version 1.3, DOM methods and functions like alert	// aren't supported. They return false on IE (#2968).	isFunction: function( obj ) {		return toString.call(obj) === "[object Function]";	},	isArray: function( obj ) {		return toString.call(obj) === "[object Array]";	},	isPlainObject: function( obj ) {		// Must be an Object.		// Because of IE, we also have to check the presence of the constructor property.		// Make sure that DOM nodes and window objects don't pass through, as well		if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {			return false;		}				// Not own constructor property must be Object		if ( obj.constructor			&& !hasOwnProperty.call(obj, "constructor")			&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {			return false;		}				// Own properties are enumerated firstly, so to speed up,		// if last one is own, then all properties are own.			var key;		for ( key in obj ) {}				return key === undefined || hasOwnProperty.call( obj, key );	},	isEmptyObject: function( obj ) {		for ( var name in obj ) {			return false;		}		return true;	},		error: function( msg ) {		throw msg;	},		parseJSON: function( data ) {		if ( typeof data !== "string" || !data ) {			return null;		}		// Make sure leading/trailing whitespace is removed (IE can't handle it)		data = jQuery.trim( data );				// Make sure the incoming data is actual JSON		// Logic borrowed from http://json.org/json2.js		if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")			.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -