复制代码 代码如下: /* prevent execution of jQuery if included more then once */ if(typeof window.jQuery == "undefined") { /* * jQuery 1.0.2 - 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-10-09 20:23:18 -0400 (Mon, 09 Oct 2006) $ * $Rev: 413 $ */
// Shortcut for document ready (because $(document).each() is silly) if ( a && typeof a == "function" && jQuery.fn.ready ) return jQuery(document).ready(a);
// Make sure that a selection was provided a = a || jQuery.context || 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 var m = /^[^<]*(<.+>)[^>]*$/.exec(a); if ( m ) a = jQuery.clean( [ m[1] ] );
// Watch for when an array is passed in this.get( a.constructor == Array || a.length && !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); };
// 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.2",
size: function() { return this.length; },
get: function( num ) { // Watch for when an array (of elements) is passed in if ( num && num.constructor == Array ) {
// Use a tricky hack to make the jQuery object // look and feel like an array this.length = 0; [].push.apply( this, num );
return this; } else return num == undefined ?
// Return a "clean" array jQuery.merge( this, [] ) :
// Return just the object this[num]; }, 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 ) { // 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 ); },
css: function( key, value ) { return this.attr( key, value, "curCSS" ); }, 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 ); }); },
if (prop == "opacity" && jQuery.browser.msie) return jQuery.attr(elem.style, "opacity");
if (!force && elem.style[prop]) {
ret = elem.style[prop];
} else if (elem.currentStyle) {
var newProp = prop.replace(/-(w)/g,function(m,c){return c.toUpperCase();}); ret = elem.currentStyle[prop] || elem.currentStyle[newProp];
} else if (document.defaultView && document.defaultView.getComputedStyle) {
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() { ret = document.defaultView.getComputedStyle(this,null).getPropertyValue(prop); });
}
return ret; },
clean: function(a) { var r = []; for ( var i = 0; i < a.length; i++ ) { if ( a[i].constructor == String ) { // trim whitespace, otherwise indexOf won"t work as expected a[i] = jQuery.trim(a[i]);
token: [ "\.\.|/\.\.", "a.parentNode", ">|/", "jQuery.sibling(a.firstChild)", "\+", "jQuery.sibling(a).next", "~", function(a){ var r = []; var s = jQuery.sibling(a); if ( s.n > 0 ) for ( var i = s.n; i < s.length; i++ ) r.push( s[i] ); return r; } ], 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 || jQuery.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]) ); } }
}
if ( t ) { var val = jQuery.filter(t,r); ret = r = val.r; t = jQuery.trim(val.t); } }
if ( ret && ret[0] == context ) ret.shift(); done = jQuery.merge( done, ret );
return done; },
getAll: function(o,r) { r = r || []; var s = o.childNodes; &