复制代码 代码如下: /* prevent execution of jQuery if included more then once */ if(typeof window.jQuery == "undefined") { /* * jQuery 1.0.4 - New Wave Javascript * * Copyright (c) 2006 John Resig (jquery.com) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * $Date: 2006-12-12 15:33:10 -0500 (Tue, 12 Dec 2006) $ * $Rev: 696 $ */
// Global undefined variable window.undefined = window.undefined;
var jQuery = function(a,c) {
// Shortcut for document ready if ( a && typeof a == "function" && jQuery.fn.ready && !a.nodeType && a[0] == undefined ) // Safari reports typeof on DOM NodeLists as a function return jQuery(document).ready(a);
// Make sure that a selection was provided a = a || document;
// Watch for when a jQuery object is passed as the selector if ( a.jquery ) return jQuery( jQuery.merge( a, [] ) );
// Watch for when a jQuery object is passed at the context if ( c && c.jquery ) return jQuery( c ).find(a);
// If the context is global, return a new object if ( window == this ) return new jQuery(a,c);
// Handle HTML strings if ( typeof a == "string" ) { var m = /^[^<]*(<.+>)[^>]*$/.exec(a); if ( m ) a = jQuery.clean( [ m[1] ] ); }
// Watch for when an array is passed in this.set( a.constructor == Array || a.length && a != window && !a.nodeType && a[0] != undefined && a[0].nodeType ? // Assume that it is an array of DOM Elements jQuery.merge( a, [] ) :
// Find the matching elements and save them for later jQuery.find( a, c ) );
// See if an extra function was provided var fn = arguments[ arguments.length - 1 ];
// If so, execute it in context if ( fn && typeof fn == "function" ) this.each(fn);
return this; };
// Map over the $ in case of overwrite if ( typeof $ != "undefined" ) jQuery._$ = $;
// Map the jQuery namespace to the "$" one var $ = jQuery;
jQuery.fn = jQuery.prototype = {
jquery: "1.0.4",
size: function() { return this.length; },
get: function( num ) { return num == undefined ?
// Return a "clean" array jQuery.merge( this, [] ) :
// Return just the object this[num]; },
set: function( array ) { // Use a tricky hack to make the jQuery object // look and feel like an array this.length = 0; [].push.apply( this, array ); return this; },
index: function( obj ) { var pos = -1; this.each(function(i){ if ( this == obj ) pos = i; }); return pos; },
attr: function( key, value, type ) { // Check to see if we"re setting style values return key.constructor != String || value != undefined ? this.each(function(){ // See if we"re setting a hash of styles if ( value == undefined ) // Set all the styles for ( var prop in key ) jQuery.attr( type ? this.style : this, prop, key[prop] );
// See if we"re setting a single key/value style else jQuery.attr( type ? this.style : this, key, value ); }) :
// Look for the case where we"re accessing a style value jQuery[ type || "attr" ]( this[0], key ); },
text: function(e) { e = e || this; var t = ""; for ( var j = 0; j < e.length; j++ ) { var r = e[j].childNodes; for ( var i = 0; i < r.length; i++ ) if ( r[i].nodeType != 8 ) t += r[i].nodeType != 1 ? r[i].nodeValue : jQuery.fn.text([ r[i] ]); } return t; },
wrap: function() { // The elements to wrap the target around var a = jQuery.clean(arguments);
// Wrap each of the matched elements individually return this.each(function(){ // Clone the structure that we"re using to wrap var b = a[0].cloneNode(true);
// Insert it before the element to be wrapped this.parentNode.insertBefore( b, this );
// Find the deepest point in the wrap structure while ( b.firstChild ) b = b.firstChild;
// Move the matched element to within the wrap structure b.appendChild( this ); }); },
for ( var i = ( dir < 0 ? a.length - 1 : 0 ); i != ( dir < 0 ? dir : a.length ); i += dir ) { fn.apply( obj, [ clone ? a[i].cloneNode(true) : a[i] ] ); } }); },
pushStack: function(a,args) { var fn = args && args[args.length-1]; var fn2 = args && args[args.length-2];
if ( fn && fn.constructor != Function ) fn = null; if ( fn2 && fn2.constructor != Function ) fn2 = null;
if ( !fn ) { if ( !this.stack ) this.stack = []; this.stack.push( this.get() ); this.set( a ); } else { var old = this.get(); this.set( a );
if ( fn2 && a.length || !fn2 ) this.each( fn2 || fn ).set( old ); else this.set( old ).each( fn ); }
return this; } };
jQuery.extend = jQuery.fn.extend = function() { // copy reference to target object var target = arguments[0], a = 1;
// extend jQuery itself if only one argument is passed if ( arguments.length == 1 ) { target = this; a = 0; } var prop; while (prop = arguments[a++]) // Extend the base object for ( var i in prop ) target[i] = prop[i];
// Return the modified object return target; };
jQuery.extend({
init: function(){ jQuery.initDone = true;
jQuery.each( jQuery.macros.axis, function(i,n){ jQuery.fn[ i ] = function(a) { var ret = jQuery.map(this,n); if ( a && typeof a == "string" ) ret = jQuery.filter(a,ret).r; return this.pushStack( ret, arguments ); }; });
jQuery.each( jQuery.macros.to, function(i,n){ jQuery.fn[ i ] = function(){ var a = arguments; return this.each(function(){ for ( var j = 0; j < a.length; j++ ) jQuery(a[j])[n]( this ); }); }; });
jQuery.each( jQuery.macros.each, function(i,n){ jQuery.fn[ i ] = function() { return this.each( n, arguments ); }; });
jQuery.each( jQuery.macros.filter, function(i,n){ jQuery.fn[ n ] = function(num,fn) { return this.filter( ":" + n + "(" + num + ")", fn ); }; });
jQuery.each( jQuery.macros.attr, function(i,n){ n = n || i; jQuery.fn[ i ] = function(h) { return h == undefined ? this.length ? this[0][n] : null : this.attr( n, h ); }; });
jQuery.each( jQuery.macros.css, function(i,n){ jQuery.fn[ n ] = function(h) { return h == undefined ? ( this.length ? jQuery.css( this[0], n ) : null ) : this.css( n, h ); }; });
},
// args is for internal usage only each: function( obj, fn, args ) { if ( obj.length == undefined ) for ( var i in obj ) fn.apply( obj[i], args || [i, obj[i]] ); else for ( var i = 0; i < obj.length; i++ ) if ( fn.apply( obj[i], args || [i, obj[i]] ) === false ) break; return obj; },
swap: function(e,o,f) { for ( var i in o ) { e.style["old"+i] = e.style[i]; e.style[i] = o[i]; } f.apply( e, [] ); for ( var i in o ) e.style[i] = e.style["old"+i]; },
css: function(e,p) { if ( p == "height" || p == "width" ) { var old = {}, oHeight, oWidth, d = ["Top","Bottom","Right","Left"];
prop = prop.replace(/([A-Z])/g,"-$1").toLowerCase(); var cur = document.defaultView.getComputedStyle(elem, null);
if ( cur ) ret = cur.getPropertyValue(prop); else if ( prop == "display" ) ret = "none"; else jQuery.swap(elem, { display: "block" }, function() { var c = document.defaultView.getComputedStyle(this, ""); ret = c && c.getPropertyValue(prop) || ""; });
} else if (elem.currentStyle) {
var newProp = prop.replace(/-(w)/g,function(m,c){return c.toUpperCase();}); ret = elem.currentStyle[prop] || elem.currentStyle[newProp];
}
return ret; },
clean: function(a) { var r = []; for ( var i = 0; i < a.length; i++ ) { var arg = a[i]; if ( typeof arg == "string" ) { // Convert html string into DOM nodes // Trim whitespace, otherwise indexOf won"t work as expected var s = jQuery.trim(arg), div = document.createElement("div"), wrap = [0,"",""];
if ( !s.indexOf("<opt") ) // option or optgroup wrap = [1, "<select>", "</select>"]; else if ( !s.indexOf("<thead") || !s.indexOf("<tbody") ) wrap = [1, "<table>", "</table>"]; else if ( !s.indexOf("<tr") ) wrap = [2, "<table>", "</table>"]; // tbody auto-inserted else if ( !s.indexOf("<td") || !s.indexOf("<th") ) wrap = [3, "<table><tbody><tr>", "</tr></tbody></table>"];
// Go to html and back, then peel off extra wrappers div.innerHTML = wrap[1] + s + wrap[2]; while ( wrap[0]-- ) div = div.firstChild; arg = div.childNodes; }
if ( arg.length != undefined && ( (jQuery.browser.safari && typeof arg == "function") || !arg.nodeType ) ) // Safari reports typeof on a DOM NodeList to be a function for ( var n = 0; n < arg.length; n++ ) // Handles Array, jQuery, DOM NodeList collections r.push(arg[n]); else r.push( arg.nodeType ? arg : document.createTextNode(arg.toString()) ); }
find: function( t, context ) { // Make sure that the context is a DOM Element if ( context && context.nodeType == undefined ) context = null;
// Set the correct context (if none is provided) context = context || document;
if ( t.constructor != String ) return [t];
if ( !t.indexOf("//") ) { context = context.documentElement; t = t.substr(2,t.length); } else if ( !t.indexOf("/") ) { context = context.documentElement; t = t.substr(1,t.length); // FIX Assume the root element is right :( if ( t.indexOf("/") >= 1 ) t = t.substr(t.indexOf("/"),t.length); }
var ret = [context]; var done = []; var last = null;
while ( t.length > 0 && last != t ) { var r = []; last = t;
t = jQuery.trim(t).replace( /^///i, "" );
var foundToken = false;
for ( var i = 0; i < jQuery.token.length; i += 2 ) { if ( foundToken ) continue;
var re = new RegExp("^(" + jQuery.token[i] + ")"); var m = re.exec(t);
if ( m ) { r = ret = jQuery.map( ret, jQuery.token[i+1] ); t = jQuery.trim( t.replace( re, "" ) ); foundToken = true; } }
if ( !foundToken ) { if ( !t.indexOf(",") || !t.indexOf("|") ) { if ( ret[0] == context ) ret.shift(); done = jQuery.merge( done, ret ); r = ret = [context]; t = " " + t.substr(1,t.length); } else { var re2 = /^([#.]?)([a-z0-9\*_-]*)/i; var m = re2.exec(t);
if ( m[1] == "#" ) { // Ummm, should make this work in all XML docs var oid = document.getElementById(m[2]); r = ret = oid ? [oid] : []; t = t.replace( re2, "" ); } else { if ( !m[2] || m[1] == "." ) m[2] = "*";
for ( var i = 0; i < ret.length; i++ ) r = jQuery.merge( r, m[2] == "*" ? jQuery.getAll(ret[i]) : ret[i].getElementsByTagName(m[2]) ); } }