📄 jquery.js
字号:
(function(){/* * jQuery 1.2.1 - New Wave Javascript * * Copyright (c) 2007 John Resig (jquery.com) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * $Date: 2007-09-16 23:42:06 -0400 (Sun, 16 Sep 2007) $ * $Rev: 3353 $ */// Map over jQuery in case of overwriteif ( typeof jQuery != "undefined" ) var _jQuery = jQuery;var jQuery = window.jQuery = function(selector, context) { // If the context is a namespace object, return a new object return this instanceof jQuery ? this.init(selector, context) : new jQuery(selector, context);};// Map over the $ in case of overwriteif ( typeof $ != "undefined" ) var _$ = $; // Map the jQuery namespace to the '$' onewindow.$ = jQuery;var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;jQuery.fn = jQuery.prototype = { init: function(selector, context) { // Make sure that a selection was provided selector = selector || document; // Handle HTML strings if ( typeof selector == "string" ) { var m = quickExpr.exec(selector); if ( m && (m[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( m[1] ) selector = jQuery.clean( [ m[1] ], context ); // HANDLE: $("#id") else { var tmp = document.getElementById( m[3] ); if ( tmp ) // Handle the case where IE and Opera return items // by name instead of ID if ( tmp.id != m[3] ) return jQuery().find( selector ); else { this[0] = tmp; this.length = 1; return this; } else selector = []; } // HANDLE: $(expr) } else return new jQuery( context ).find( selector ); // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction(selector) ) return new jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( selector ); return this.setArray( // HANDLE: $(array) selector.constructor == Array && selector || // HANDLE: $(arraylike) // Watch for when an array-like object is passed as the selector (selector.jquery || selector.length && selector != window && !selector.nodeType && selector[0] != undefined && selector[0].nodeType) && jQuery.makeArray( selector ) || // HANDLE: $(*) [ selector ] ); }, jquery: "1.2.1", size: function() { return this.length; }, length: 0, get: function( num ) { return num == undefined ? // Return a 'clean' array jQuery.makeArray( this ) : // Return just the object this[num]; }, pushStack: function( a ) { var ret = jQuery(a); ret.prevObject = this; return ret; }, setArray: function( a ) { this.length = 0; Array.prototype.push.apply( this, a ); return this; }, each: function( fn, args ) { return jQuery.each( this, fn, args ); }, index: function( obj ) { var pos = -1; this.each(function(i){ if ( this == obj ) pos = i; }); return pos; }, attr: function( key, value, type ) { var obj = key; // Look for the case where we're accessing a style value if ( key.constructor == String ) if ( value == undefined ) return this.length && jQuery[ type || "attr" ]( this[0], key ) || undefined; else { obj = {}; obj[ key ] = value; } // Check to see if we're setting style values return this.each(function(index){ // Set all the styles for ( var prop in obj ) jQuery.attr( type ? this.style : this, prop, jQuery.prop(this, obj[prop], type, index, prop) ); }); }, css: function( key, value ) { return this.attr( key, value, "curCSS" ); }, text: function(e) { if ( typeof e != "object" && e != null ) return this.empty().append( document.createTextNode( e ) ); var t = ""; jQuery.each( e || this, function(){ jQuery.each( this.childNodes, function(){ if ( this.nodeType != 8 ) t += this.nodeType != 1 ? this.nodeValue : jQuery.fn.text([ this ]); }); }); return t; }, wrapAll: function(html) { if ( this[0] ) // The elements to wrap the target around jQuery(html, this[0].ownerDocument) .clone() .insertBefore(this[0]) .map(function(){ var elem = this; while ( elem.firstChild ) elem = elem.firstChild; return elem; }) .append(this); return this; }, wrapInner: function(html) { return this.each(function(){ jQuery(this).contents().wrapAll(html); }); }, wrap: function(html) { return this.each(function(){ jQuery(this).wrapAll(html); }); }, append: function() { return this.domManip(arguments, true, 1, function(a){ this.appendChild( a ); }); }, prepend: function() { return this.domManip(arguments, true, -1, function(a){ this.insertBefore( a, this.firstChild ); }); }, before: function() { return this.domManip(arguments, false, 1, function(a){ this.parentNode.insertBefore( a, this ); }); }, after: function() { return this.domManip(arguments, false, -1, function(a){ this.parentNode.insertBefore( a, this.nextSibling ); }); }, end: function() { return this.prevObject || jQuery([]); }, find: function(t) { var data = jQuery.map(this, function(a){ return jQuery.find(t,a); }); return this.pushStack( /[^+>] [^+>]/.test( t ) || t.indexOf("..") > -1 ? jQuery.unique( data ) : data ); }, clone: function(events) { // Do the clone var ret = this.map(function(){ return this.outerHTML ? jQuery(this.outerHTML)[0] : this.cloneNode(true); }); // Need to set the expando to null on the cloned set if it exists // removeData doesn't work here, IE removes it from the original as well // this is primarily for IE but the data expando shouldn't be copied over in any browser var clone = ret.find("*").andSelf().each(function(){ if ( this[ expando ] != undefined ) this[ expando ] = null; }); // Copy the events from the original to the clone if (events === true) this.find("*").andSelf().each(function(i) { var events = jQuery.data(this, "events"); for ( var type in events ) for ( var handler in events[type] ) jQuery.event.add(clone[i], type, events[type][handler], events[type][handler].data); }); // Return the cloned set return ret; }, filter: function(t) { return this.pushStack( jQuery.isFunction( t ) && jQuery.grep(this, function(el, index){ return t.apply(el, [index]); }) || jQuery.multiFilter(t,this) ); }, not: function(t) { return this.pushStack( t.constructor == String && jQuery.multiFilter(t, this, true) || jQuery.grep(this, function(a) { return ( t.constructor == Array || t.jquery ) ? jQuery.inArray( a, t ) < 0 : a != t; }) ); }, add: function(t) { return this.pushStack( jQuery.merge( this.get(), t.constructor == String ? jQuery(t).get() : t.length != undefined && (!t.nodeName || jQuery.nodeName(t, "form")) ? t : [t] ) ); }, is: function(expr) { return expr ? jQuery.multiFilter(expr,this).length > 0 : false; }, hasClass: function(expr) { return this.is("." + expr); }, val: function( val ) { if ( val == undefined ) { if ( this.length ) { var elem = this[0]; // We need to handle select boxes special if ( jQuery.nodeName(elem, "select") ) { var index = elem.selectedIndex, a = [], options = elem.options, one = elem.type == "select-one"; // Nothing was selected if ( index < 0 ) return null; // Loop through all the selected options for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { var option = options[i]; if ( option.selected ) { // Get the specifc value for the option var val = jQuery.browser.msie && !option.attributes["value"].specified ? option.text : option.value; // We don't need an array for one selects if ( one ) return val; // Multi-Selects return an array a.push(val); } } return a; // Everything else, we just grab the value } else return this[0].value.replace(/\r/g, ""); } } else return this.each(function(){ if ( val.constructor == Array && /radio|checkbox/.test(this.type) ) this.checked = (jQuery.inArray(this.value, val) >= 0 || jQuery.inArray(this.name, val) >= 0); else if ( jQuery.nodeName(this, "select") ) { var tmp = val.constructor == Array ? val : [val]; jQuery("option", this).each(function(){ this.selected = (jQuery.inArray(this.value, tmp) >= 0 || jQuery.inArray(this.text, tmp) >= 0); }); if ( !tmp.length ) this.selectedIndex = -1; } else this.value = val; }); }, html: function( val ) { return val == undefined ? ( this.length ? this[0].innerHTML : null ) : this.empty().append( val ); }, replaceWith: function( val ) { return this.after( val ).remove(); }, eq: function(i){ return this.slice(i, i+1); }, slice: function() { return this.pushStack( Array.prototype.slice.apply( this, arguments ) ); }, map: function(fn) { return this.pushStack(jQuery.map( this, function(elem,i){ return fn.call( elem, i, elem ); })); }, andSelf: function() { return this.add( this.prevObject ); }, domManip: function(args, table, dir, fn) { var clone = this.length > 1, a; return this.each(function(){ if ( !a ) { a = jQuery.clean(args, this.ownerDocument); if ( dir < 0 ) a.reverse(); } var obj = this; if ( table && jQuery.nodeName(this, "table") && jQuery.nodeName(a[0], "tr") ) obj = this.getElementsByTagName("tbody")[0] || this.appendChild(document.createElement("tbody")); jQuery.each( a, function(){ var elem = clone ? this.cloneNode(true) : this; if ( !evalScript(0, elem) ) fn.call( obj, elem ); }); }); }};function evalScript(i, elem){ var script = jQuery.nodeName(elem, "script"); if ( script ) { if ( elem.src ) jQuery.ajax({ url: elem.src, async: false, dataType: "script" }); else jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); if ( elem.parentNode ) elem.parentNode.removeChild(elem); } else if ( elem.nodeType == 1 ) jQuery("script", elem).each(evalScript); return script;}jQuery.extend = jQuery.fn.extend = function() { // copy reference to target object var target = arguments[0] || {}, a = 1, al = arguments.length, deep = false; // Handle a deep copy situation if ( target.constructor == Boolean ) { deep = target; target = arguments[1] || {}; } // extend jQuery itself if only one argument is passed if ( al == 1 ) { target = this; a = 0; } var prop; for ( ; a < al; a++ ) // Only deal with non-null/undefined values if ( (prop = arguments[a]) != null ) // Extend the base object for ( var i in prop ) { // Prevent never-ending loop if ( target == prop[i] ) continue; // Recurse if we're merging object values if ( deep && typeof prop[i] == 'object' && target[i] ) jQuery.extend( target[i], prop[i] ); // Don't bring in undefined values else if ( prop[i] != undefined ) target[i] = prop[i]; } // Return the modified object return target;};var expando = "jQuery" + (new Date()).getTime(), uuid = 0, win = {};jQuery.extend({ noConflict: function(deep) { window.$ = _$; if ( deep ) window.jQuery = _jQuery; return jQuery; }, // This may seem like some crazy code, but trust me when I say that this // is the only cross-browser way to do this. --John isFunction: function( fn ) { return !!fn && typeof fn != "string" && !fn.nodeName && fn.constructor != Array && /function/i.test( fn + "" ); }, // check if an element is in a XML document isXMLDoc: function(elem) { return elem.documentElement && !elem.body || elem.tagName && elem.ownerDocument && !elem.ownerDocument.body; },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -