HTML中动态图片切换JQuery实现



相信很多同学都注意到了,各大新闻或者娱乐网站都含有动态图片切换,那个漂亮的感觉让刚刚学习html的人,都非常好奇和心动。那下面就让我们看一下到底如何实现动态图片切换呢?看一下百度贴吧的效果图吧~

 

 

 

[javascript] view plain copy print ?
  1.   
 
[javascript] view plain copy print ?
  1. // JavaScript Document  
  2. var t = count = n = 0;  
  3. $(function(){  
  4.     $(".big_img a:not(:first)").hide();  
  5.     $(".link_nav a:not(:first)").hide();  
  6.     $num_nav = $(".num_nav span");  
  7.     $big_img = $(".big_img a");  
  8.     count = $big_img.length;  
  9.     t = setInterval("showAuto()", 3000);    
  10.       
  11.     $num_nav.click(function(){  
  12.         var num_nav = $(".num_nav span").index(this);  
  13.         $(this).addClass("selected").siblings().removeClass("selected");  
  14.         $big_img.filter(":visible").fadeOut(500).parent().children().eq(num_nav).fadeIn(1000);   
  15.         $(".link_nav a").filter(":visible").fadeOut(500).parent().children().eq(num_nav).fadeIn(1000);   
  16.     });  
  17.     $(".img_nav").hover(function(){clearInterval(t)}, function(){t = setInterval("showAuto()", 3000);});   
  18. })  
  19.   
  20. function showAuto()     
  21. {     
  22.     n = n >= 2 ? 0 : (n + 1);     
  23.     $num_nav.eq(n).trigger('click');     
  24. }  
// JavaScript Document
var t = count = n = 0;
$(function(){
	$(".big_img a:not(:first)").hide();
	$(".link_nav a:not(:first)").hide();
	$num_nav = $(".num_nav span");
	$big_img = $(".big_img a");
	count = $big_img.length;
	t = setInterval("showAuto()", 3000);  
	
	$num_nav.click(function(){
		var num_nav = $(".num_nav span").index(this);
		$(this).addClass("selected").siblings().removeClass("selected");
		$big_img.filter(":visible").fadeOut(500).parent().children().eq(num_nav).fadeIn(1000); 
		$(".link_nav a").filter(":visible").fadeOut(500).parent().children().eq(num_nav).fadeIn(1000); 
	});
	$(".img_nav").hover(function(){clearInterval(t)}, function(){t = setInterval("showAuto()", 3000);}); 
})

function showAuto()   
{   
	n = n >= 2 ? 0 : (n + 1);   
	$num_nav.eq(n).trigger('click');   
}


 

[javascript] view plain copy print ?
  1. /*! 
  2.  * jQuery JavaScript Library v1.3.1 
  3.  * http://jquery.com/ 
  4.  * 
  5.  * Copyright (c) 2009 John Resig 
  6.  * Dual licensed under the MIT and GPL licenses. 
  7.  * http://docs.jquery.com/License 
  8.  * 
  9.  * Date: 2009-01-21 20:42:16 -0500 (Wed, 21 Jan 2009) 
  10.  * Revision: 6158 
  11.  */  
  12. (function(){  
  13.   
  14. var   
  15.     // Will speed up references to window, and allows munging its name.  
  16.     window = this,  
  17.     // Will speed up references to undefined, and allows munging its name.  
  18.     undefined,  
  19.     // Map over jQuery in case of overwrite  
  20.     _jQuery = window.jQuery,  
  21.     // Map over the $ in case of overwrite  
  22.     _$ = window.$,  
  23.   
  24.     jQuery = window.jQuery = window.$ = function( selector, context ) {  
  25.         // The jQuery object is actually just the init constructor 'enhanced'  
  26.         return new jQuery.fn.init( selector, context );  
  27.     },  
  28.   
  29.     // A simple way to check for HTML strings or ID strings  
  30.     // (both of which we optimize for)  
  31.     quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,  
  32.     // Is it a simple selector  
  33.     isSimple = /^.[^:#\[\.,]*$/;  
  34.   
  35. jQuery.fn = jQuery.prototype = {  
  36.     init: function( selector, context ) {  
  37.         // Make sure that a selection was provided  
  38.         selector = selector || document;  
  39.   
  40.         // Handle $(DOMElement)  
  41.         if ( selector.nodeType ) {  
  42.             this[0] = selector;  
  43.             this.length = 1;  
  44.             this.context = selector;  
  45.             return this;  
  46.         }  
  47.         // Handle HTML strings  
  48.         if ( typeof selector === "string" ) {  
  49.             // Are we dealing with HTML string or an ID?  
  50.             var match = quickExpr.exec( selector );  
  51.   
  52.             // Verify a match, and that no context was specified for #id  
  53.             if ( match && (match[1] || !context) ) {  
  54.   
  55.                 // HANDLE: $(html) -> $(array)  
  56.                 if ( match[1] )  
  57.                     selector = jQuery.clean( [ match[1] ], context );  
  58.   
  59.                 // HANDLE: $("#id")  
  60.                 else {  
  61.                     var elem = document.getElementById( match[3] );  
  62.   
  63.                     // Handle the case where IE and Opera return items  
  64.                     // by name instead of ID  
  65.                     if ( elem && elem.id != match[3] )  
  66.                         return jQuery().find( selector );  
  67.   
  68.                     // Otherwise, we inject the element directly into the jQuery object  
  69.                     var ret = jQuery( elem || [] );  
  70.                     ret.context = document;  
  71.                     ret.selector = selector;  
  72.                     return ret;  
  73.                 }  
  74.   
  75.             // HANDLE: $(expr, [context])  
  76.             // (which is just equivalent to: $(content).find(expr)  
  77.             } else  
  78.                 return jQuery( context ).find( selector );  
  79.   
  80.         // HANDLE: $(function)  
  81.         // Shortcut for document ready  
  82.         } else if ( jQuery.isFunction( selector ) )  
  83.             return jQuery( document ).ready( selector );  
  84.   
  85.         // Make sure that old selector state is passed along  
  86.         if ( selector.selector && selector.context ) {  
  87.             this.selector = selector.selector;  
  88.             this.context = selector.context;  
  89.         }  
  90.   
  91.         return this.setArray(jQuery.makeArray(selector));  
  92.     },  
  93.   
  94.     // Start with an empty selector  
  95.     selector: "",  
  96.   
  97.     // The current version of jQuery being used  
  98.     jquery: "1.3.1",  
  99.   
  100.     // The number of elements contained in the matched element set  
  101.     size: function() {  
  102.         return this.length;  
  103.     },  
  104.   
  105.     // Get the Nth element in the matched element set OR  
  106.     // Get the whole matched element set as a clean array  
  107.     get: function( num ) {  
  108.         return num === undefined ?  
  109.   
  110.             // Return a 'clean' array  
  111.             jQuery.makeArray( this ) :  
  112.   
  113.             // Return just the object  
  114.             this[ num ];  
  115.     },  
  116.   
  117.     // Take an array of elements and push it onto the stack  
  118.     // (returning the new matched element set)  
  119.     pushStack: function( elems, name, selector ) {  
  120.         // Build a new jQuery matched element set  
  121.         var ret = jQuery( elems );  
  122.   
  123.         // Add the old object onto the stack (as a reference)  
  124.         ret.prevObject = this;  
  125.   
  126.         ret.context = this.context;  
  127.   
  128.         if ( name === "find" )  
  129.             ret.selector = this.selector + (this.selector ? " " : "") + selector;  
  130.         else if ( name )  
  131.             ret.selector = this.selector + "." + name + "(" + selector + ")";  
  132.   
  133.         // Return the newly-formed element set  
  134.         return ret;  
  135.     },  
  136.   
  137.     // Force the current matched set of elements to become  
  138.     // the specified array of elements (destroying the stack in the process)  
  139.     // You should use pushStack() in order to do this, but maintain the stack  
  140.     setArray: function( elems ) {  
  141.         // Resetting the length to 0, then using the native Array push  
  142.         // is a super-fast way to populate an object with array-like properties  
  143.         this.length = 0;  
  144.         Array.prototype.push.apply( this, elems );  
  145.   
  146.         return this;  
  147.     },  
  148.   
  149.     // Execute a callback for every element in the matched set.  
  150.     // (You can seed the arguments with an array of args, but this is  
  151.     // only used internally.)  
  152.     each: function( callback, args ) {  
  153.         return jQuery.each( this, callback, args );  
  154.     },  
  155.   
  156.     // Determine the position of an element within  
  157.     // the matched set of elements  
  158.     index: function( elem ) {  
  159.         // Locate the position of the desired element  
  160.         return jQuery.inArray(  
  161.             // If it receives a jQuery object, the first element is used  
  162.             elem && elem.jquery ? elem[0] : elem  
  163.         , this );  
  164.     },  
  165.   
  166.     attr: function( name, value, type ) {  
  167.         var options = name;  
  168.   
  169.         // Look for the case where we're accessing a style value  
  170.         if ( typeof name === "string" )  
  171.             if ( value === undefined )  
  172.                 return this[0] && jQuery[ type || "attr" ]( this[0], name );  
  173.   
  174.             else {  
  175.                 options = {};  
  176.                 options[ name ] = value;  
  177.             }  
  178.   
  179.         // Check to see if we're setting style values  
  180.         return this.each(function(i){  
  181.             // Set all the styles  
  182.             for ( name in options )  
  183.                 jQuery.attr(  
  184.                     type ?  
  185.                         this.style :  
  186.                         this,  
  187.                     name, jQuery.prop( this, options[ name ], type, i, name )  
  188.                 );  
  189.         });  
  190.     },  
  191.   
  192.     css: function( key, value ) {  
  193.         // ignore negative width and height values  
  194.         if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )  
  195.             value = undefined;  
  196.         return this.attr( key, value, "curCSS" );  
  197.     },  
  198.   
  199.     text: function( text ) {  
  200.         if ( typeof text !== "object" && text != null )  
  201.             return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );  
  202.   
  203.         var ret = "";  
  204.   
  205.         jQuery.each( text || thisfunction(){  
  206.             jQuery.each( this.childNodes, function(){  
  207.                 if ( this.nodeType != 8 )  
  208.                     ret += this.nodeType != 1 ?  
  209.                         this.nodeValue :  
  210.                         jQuery.fn.text( [ this ] );  
  211.             });  
  212.         });  
  213.   
  214.         return ret;  
  215.     },  
  216.   
  217.     wrapAll: function( html ) {  
  218.         if ( this[0] ) {  
  219.             // The elements to wrap the target around  
  220.             var wrap = jQuery( html, this[0].ownerDocument ).clone();  
  221.   
  222.             if ( this[0].parentNode )  
  223.                 wrap.insertBefore( this[0] );  
  224.   
  225.             wrap.map(function(){  
  226.                 var elem = this;  
  227.   
  228.                 while ( elem.firstChild )  
  229.                     elem = elem.firstChild;  
  230.   
  231.                 return elem;  
  232.             }).append(this);  
  233.         }  
  234.   
  235.         return this;  
  236.     },  
  237.   
  238.     wrapInner: function( html ) {  
  239.         return this.each(function(){  
  240.             jQuery( this ).contents().wrapAll( html );  
  241.         });  
  242.     },  
  243.   
  244.     wrap: function( html ) {  
  245.         return this.each(function(){  
  246.             jQuery( this ).wrapAll( html );  
  247.         });  
  248.     },  
  249.   
  250.     append: function() {  
  251.         return this.domManip(arguments, truefunction(elem){  
  252.             if (this.nodeType == 1)  
  253.                 this.appendChild( elem );  
  254.         });  
  255.     },  
  256.   
  257.     prepend: function() {  
  258.         return this.domManip(arguments, truefunction(elem){  
  259.             if (this.nodeType == 1)  
  260.                 this.insertBefore( elem, this.firstChild );  
  261.         });  
  262.     },  
  263.   
  264.     before: function() {  
  265.         return this.domManip(arguments, falsefunction(elem){  
  266.             this.parentNode.insertBefore( elem, this );  
  267.         });  
  268.     },  
  269.   
  270.     after: function() {  
  271.         return this.domManip(arguments, falsefunction(elem){  
  272.             this.parentNode.insertBefore( elem, this.nextSibling );  
  273.         });  
  274.     },  
  275.   
  276.     end: function() {  
  277.         return this.prevObject || jQuery( [] );  
  278.     },  
  279.   
  280.     // For internal use only.  
  281.     // Behaves like an Array's .push method, not like a jQuery method.  
  282.     push: [].push,  
  283.   
  284.     find: function( selector ) {  
  285.         if ( this.length === 1 && !/,/.test(selector) ) {  
  286.             var ret = this.pushStack( [], "find", selector );  
  287.             ret.length = 0;  
  288.             jQuery.find( selector, this[0], ret );  
  289.             return ret;  
  290.         } else {  
  291.             var elems = jQuery.map(thisfunction(elem){  
  292.                 return jQuery.find( selector, elem );  
  293.             });  
  294.   
  295.             return this.pushStack( /[^+>] [^+>]/.test( selector ) ?  
  296.                 jQuery.unique( elems ) :  
  297.                 elems, "find", selector );  
  298.         }  
  299.     },  
  300.   
  301.     clone: function( events ) {  
  302.         // Do the clone  
  303.         var ret = this.map(function(){  
  304.             if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {  
  305.                 // IE copies events bound via attachEvent when  
  306.                 // using cloneNode. Calling detachEvent on the  
  307.                 // clone will also remove the events from the orignal  
  308.                 // In order to get around this, we use innerHTML.  
  309.                 // Unfortunately, this means some modifications to  
  310.                 // attributes in IE that are actually only stored  
  311.                 // as properties will not be copied (such as the  
  312.                 // the name attribute on an input).  
  313.                 var clone = this.cloneNode(true),  
  314.                     container = document.createElement("div");  
  315.                 container.appendChild(clone);  
  316.                 return jQuery.clean([container.innerHTML])[0];  
  317.             } else  
  318.                 return this.cloneNode(true);  
  319.         });  
  320.   
  321.         // Need to set the expando to null on the cloned set if it exists  
  322.         // removeData doesn't work here, IE removes it from the original as well  
  323.         // this is primarily for IE but the data expando shouldn't be copied over in any browser  
  324.         var clone = ret.find("*").andSelf().each(function(){  
  325.             if ( this[ expando ] !== undefined )  
  326.                 this[ expando ] = null;  
  327.         });  
  328.   
  329.         // Copy the events from the original to the clone  
  330.         if ( events === true )  
  331.             this.find("*").andSelf().each(function(i){  
  332.                 if (this.nodeType == 3)  
  333.                     return;  
  334.                 var events = jQuery.data( this"events" );  
  335.   
  336.                 for ( var type in events )  
  337.                     for ( var handler in events[ type ] )  
  338.                         jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );  
  339.             });  
  340.   
  341.         // Return the cloned set  
  342.         return ret;  
  343.     },  
  344.   
  345.     filter: function( selector ) {  
  346.         return this.pushStack(  
  347.             jQuery.isFunction( selector ) &&  
  348.             jQuery.grep(thisfunction(elem, i){  
  349.                 return selector.call( elem, i );  
  350.             }) ||  
  351.   
  352.             jQuery.multiFilter( selector, jQuery.grep(thisfunction(elem){  
  353.                 return elem.nodeType === 1;  
  354.             }) ), "filter", selector );  
  355.     },  
  356.   
  357.     closest: function( selector ) {  
  358.         var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null;  
  359.   
  360.         return this.map(function(){  
  361.             var cur = this;  
  362.             while ( cur && cur.ownerDocument ) {  
  363.                 if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) )  
  364.                     return cur;  
  365.                 cur = cur.parentNode;  
  366.             }  
  367.         });  
  368.     },  
  369.   
  370.     not: function( selector ) {  
  371.         if ( typeof selector === "string" )  
  372.             // test special case where just one selector is passed in  
  373.             if ( isSimple.test( selector ) )  
  374.                 return this.pushStack( jQuery.multiFilter( selector, thistrue ), "not", selector );  
  375.             else  
  376.                 selector = jQuery.multiFilter( selector, this );  
  377.   
  378.         var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;  
  379.         return this.filter(function() {  
  380.             return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;  
  381.         });  
  382.     },  
  383.   
  384.     add: function( selector ) {  
  385.         return this.pushStack( jQuery.unique( jQuery.merge(  
  386.             this.get(),  
  387.             typeof selector === "string" ?  
  388.                 jQuery( selector ) :  
  389.                 jQuery.makeArray( selector )  
  390.         )));  
  391.     },  
  392.   
  393.     is: function( selector ) {  
  394.         return !!selector && jQuery.multiFilter( selector, this ).length > 0;  
  395.     },  
  396.   
  397.     hasClass: function( selector ) {  
  398.         return !!selector && this.is( "." + selector );  
  399.     },  
  400.   
  401.     val: function( value ) {  
  402.         if ( value === undefined ) {              
  403.             var elem = this[0];  
  404.   
  405.             if ( elem ) {  
  406.                 if( jQuery.nodeName( elem, 'option' ) )  
  407.                     return (elem.attributes.value || {}).specified ? elem.value : elem.text;  
  408.                   
  409.                 // We need to handle select boxes special  
  410.                 if ( jQuery.nodeName( elem, "select" ) ) {  
  411.                     var index = elem.selectedIndex,  
  412.                         values = [],  
  413.                         options = elem.options,  
  414.                         one = elem.type == "select-one";  
  415.   
  416.                     // Nothing was selected  
  417.                     if ( index < 0 )  
  418.                         return null;  
  419.   
  420.                     // Loop through all the selected options  
  421.                     for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {  
  422.                         var option = options[ i ];  
  423.   
  424.                         if ( option.selected ) {  
  425.                             // Get the specifc value for the option  
  426.                             value = jQuery(option).val();  
  427.   
  428.                             // We don't need an array for one selects  
  429.                             if ( one )  
  430.                                 return value;  
  431.   
  432.                             // Multi-Selects return an array  
  433.                             values.push( value );  
  434.                         }  
  435.                     }  
  436.   
  437.                     return values;                
  438.                 }  
  439.   
  440.                 // Everything else, we just grab the value  
  441.                 return (elem.value || "").replace(/\r/g, "");  
  442.   
  443.             }  
  444.   
  445.             return undefined;  
  446.         }  
  447.   
  448.         if ( typeof value === "number" )  
  449.             value += '';  
  450.   
  451.         return this.each(function(){  
  452.             if ( this.nodeType != 1 )  
  453.                 return;  
  454.   
  455.             if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )  
  456.                 this.checked = (jQuery.inArray(this.value, value) >= 0 ||  
  457.                     jQuery.inArray(this.name, value) >= 0);  
  458.   
  459.             else if ( jQuery.nodeName( this"select" ) ) {  
  460.                 var values = jQuery.makeArray(value);  
  461.   
  462.                 jQuery( "option"this ).each(function(){  
  463.                     this.selected = (jQuery.inArray( this.value, values ) >= 0 ||  
  464.                         jQuery.inArray( this.text, values ) >= 0);  
  465.                 });  
  466.   
  467.                 if ( !values.length )  
  468.                     this.selectedIndex = -1;  
  469.   
  470.             } else  
  471.                 this.value = value;  
  472.         });  
  473.     },  
  474.   
  475.     html: function( value ) {  
  476.         return value === undefined ?  
  477.             (this[0] ?  
  478.                 this[0].innerHTML :  
  479.                 null) :  
  480.             this.empty().append( value );  
  481.     },  
  482.   
  483.     replaceWith: function( value ) {  
  484.         return this.after( value ).remove();  
  485.     },  
  486.   
  487.     eq: function( i ) {  
  488.         return this.slice( i, +i + 1 );  
  489.     },  
  490.   
  491.     slice: function() {  
  492.         return this.pushStack( Array.prototype.slice.apply( this, arguments ),  
  493.             "slice", Array.prototype.slice.call(arguments).join(",") );  
  494.     },  
  495.   
  496.     map: function( callback ) {  
  497.         return this.pushStack( jQuery.map(thisfunction(elem, i){  
  498.             return callback.call( elem, i, elem );  
  499.         }));  
  500.     },  
  501.   
  502.     andSelf: function() {  
  503.         return this.add( this.prevObject );  
  504.     },  
  505.   
  506.     domManip: function( args, table, callback ) {  
  507.         if ( this[0] ) {  
  508.             var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),  
  509.                 scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),  
  510.                 first = fragment.firstChild,  
  511.                 extra = this.length > 1 ? fragment.cloneNode(true) : fragment;  
  512.   
  513.             if ( first )  
  514.                 for ( var i = 0, l = this.length; i < l; i++ )  
  515.                     callback.call( root(this[i], first), i > 0 ? extra.cloneNode(true) : fragment );  
  516.               
  517.             if ( scripts )  
  518.                 jQuery.each( scripts, evalScript );  
  519.         }  
  520.   
  521.         return this;  
  522.           
  523.         function root( elem, cur ) {  
  524.             return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?  
  525.                 (elem.getElementsByTagName("tbody")[0] ||  
  526.                 elem.appendChild(elem.ownerDocument.createElement("tbody"))) :  
  527.                 elem;  
  528.         }  
  529.     }  
  530. };  
  531.   
  532. // Give the init function the jQuery prototype for later instantiation  
  533. jQuery.fn.init.prototype = jQuery.fn;  
  534.   
  535. function evalScript( i, elem ) {  
  536.     if ( elem.src )  
  537.         jQuery.ajax({  
  538.             url: elem.src,  
  539.             async: false,  
  540.             dataType: "script"  
  541.         });  
  542.   
  543.     else  
  544.         jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );  
  545.   
  546.     if ( elem.parentNode )  
  547.         elem.parentNode.removeChild( elem );  
  548. }  
  549.   
  550. function now(){  
  551.     return +new Date;  
  552. }  
  553.   
  554. jQuery.extend = jQuery.fn.extend = function() {  
  555.     // copy reference to target object  
  556.     var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;  
  557.   
  558.     // Handle a deep copy situation  
  559.     if ( typeof target === "boolean" ) {  
  560.         deep = target;  
  561.         target = arguments[1] || {};  
  562.         // skip the boolean and the target  
  563.         i = 2;  
  564.     }  
  565.   
  566.     // Handle case when target is a string or something (possible in deep copy)  
  567.     if ( typeof target !== "object" && !jQuery.isFunction(target) )  
  568.         target = {};  
  569.   
  570.     // extend jQuery itself if only one argument is passed  
  571.     if ( length == i ) {  
  572.         target = this;  
  573.         --i;  
  574.     }  
  575.   
  576.     for ( ; i < length; i++ )  
  577.         // Only deal with non-null/undefined values  
  578.         if ( (options = arguments[ i ]) != null )  
  579.             // Extend the base object  
  580.             for ( var name in options ) {  
  581.                 var src = target[ name ], copy = options[ name ];  
  582.   
  583.                 // Prevent never-ending loop  
  584.                 if ( target === copy )  
  585.                     continue;  
  586.   
  587.                 // Recurse if we're merging object values  
  588.                 if ( deep && copy && typeof copy === "object" && !copy.nodeType )  
  589.                     target[ name ] = jQuery.extend( deep,   
  590.                         // Never move original objects, clone them  
  591.                         src || ( copy.length != null ? [ ] : { } )  
  592.                     , copy );  
  593.   
  594.                 // Don't bring in undefined values  
  595.                 else if ( copy !== undefined )  
  596.                     target[ name ] = copy;  
  597.   
  598.             }  
  599.   
  600.     // Return the modified object  
  601.     return target;  
  602. };  
  603.   
  604. // exclude the following css properties to add px  
  605. var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,  
  606.     // cache defaultView  
  607.     defaultView = document.defaultView || {},  
  608.     toString = Object.prototype.toString;  
  609.   
  610. jQuery.extend({  
  611.     noConflict: function( deep ) {  
  612.         window.$ = _$;  
  613.   
  614.         if ( deep )  
  615.             window.jQuery = _jQuery;  
  616.   
  617.         return jQuery;  
  618.     },  
  619.   
  620.     // See test/unit/core.js for details concerning isFunction.  
  621.     // Since version 1.3, DOM methods and functions like alert  
  622.     // aren't supported. They return false on IE (#2968).  
  623.     isFunction: function( obj ) {  
  624.         return toString.call(obj) === "[object Function]";  
  625.     },  
  626.   
  627.     isArray: function( obj ) {  
  628.         return toString.call(obj) === "[object Array]";  
  629.     },  
  630.   
  631.     // check if an element is in a (or is an) XML document  
  632.     isXMLDoc: function( elem ) {  
  633.         return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||  
  634.             !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );  
  635.     },  
  636.   
  637.     // Evalulates a script in a global context  
  638.     globalEval: function( data ) {  
  639.         data = jQuery.trim( data );  
  640.   
  641.         if ( data ) {  
  642.             // Inspired by code by Andrea Giammarchi  
  643.             // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html  
  644.             var head = document.getElementsByTagName("head")[0] || document.documentElement,  
  645.                 script = document.createElement("script");  
  646.   
  647.             script.type = "text/javascript";  
  648.             if ( jQuery.support.scriptEval )  
  649.                 script.appendChild( document.createTextNode( data ) );  
  650.             else  
  651.                 script.text = data;  
  652.   
  653.             // Use insertBefore instead of appendChild  to circumvent an IE6 bug.  
  654.             // This arises when a base node is used (#2709).  
  655.             head.insertBefore( script, head.firstChild );  
  656.             head.removeChild( script );  
  657.         }  
  658.     },  
  659.   
  660.     nodeName: function( elem, name ) {  
  661.         return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();  
  662.     },  
  663.   
  664.     // args is for internal usage only  
  665.     each: function( object, callback, args ) {  
  666.         var name, i = 0, length = object.length;  
  667.   
  668.         if ( args ) {  
  669.             if ( length === undefined ) {  
  670.                 for ( name in object )  
  671.                     if ( callback.apply( object[ name ], args ) === false )  
  672.                         break;  
  673.             } else  
  674.                 for ( ; i < length; )  
  675.                     if ( callback.apply( object[ i++ ], args ) === false )  
  676.                         break;  
  677.   
  678.         // A special, fast, case for the most common use of each  
  679.         } else {  
  680.             if ( length === undefined ) {  
  681.                 for ( name in object )  
  682.                     if ( callback.call( object[ name ], name, object[ name ] ) === false )  
  683.                         break;  
  684.             } else  
  685.                 for ( var value = object[0];  
  686.                     i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}  
  687.         }  
  688.   
  689.         return object;  
  690.     },  
  691.   
  692.     prop: function( elem, value, type, i, name ) {  
  693.         // Handle executable functions  
  694.         if ( jQuery.isFunction( value ) )  
  695.             value = value.call( elem, i );  
  696.   
  697.         // Handle passing in a number to a CSS property  
  698.         return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?  
  699.             value + "px" :  
  700.             value;  
  701.     },  
  702.   
  703.     className: {  
  704.         // internal only, use addClass("class")  
  705.         add: function( elem, classNames ) {  
  706.             jQuery.each((classNames || "").split(/\s+/), function(i, className){  
  707.                 if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )  
  708.                     elem.className += (elem.className ? " " : "") + className;  
  709.             });  
  710.         },  
  711.   
  712.         // internal only, use removeClass("class")  
  713.         remove: function( elem, classNames ) {  
  714.             if (elem.nodeType == 1)  
  715.                 elem.className = classNames !== undefined ?  
  716.                     jQuery.grep(elem.className.split(/\s+/), function(className){  
  717.                         return !jQuery.className.has( classNames, className );  
  718.                     }).join(" ") :  
  719.                     "";  
  720.         },  
  721.   
  722.         // internal only, use hasClass("class")  
  723.         has: function( elem, className ) {  
  724.             return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;  
  725.         }  
  726.     },  
  727.   
  728.     // A method for quickly swapping in/out CSS properties to get correct calculations  
  729.     swap: function( elem, options, callback ) {  
  730.         var old = {};  
  731.         // Remember the old values, and insert the new ones  
  732.         for ( var name in options ) {  
  733.             old[ name ] = elem.style[ name ];  
  734.             elem.style[ name ] = options[ name ];  
  735.         }  
  736.   
  737.         callback.call( elem );  
  738.   
  739.         // Revert the old values  
  740.         for ( var name in options )  
  741.             elem.style[ name ] = old[ name ];  
  742.     },  
  743.   
  744.     css: function( elem, name, force ) {  
  745.         if ( name == "width" || name == "height" ) {  
  746.             var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left""Right" ] : [ "Top""Bottom" ];  
  747.   
  748.             function getWH() {  
  749.                 val = name == "width" ? elem.offsetWidth : elem.offsetHeight;  
  750.                 var padding = 0, border = 0;  
  751.                 jQuery.each( which, function() {  
  752.                     padding += parseFloat(jQuery.curCSS( elem, "padding" + thistrue)) || 0;  
  753.                     border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width"true)) || 0;  
  754.                 });  
  755.                 val -= Math.round(padding + border);  
  756.             }  
  757.   
  758.             if ( jQuery(elem).is(":visible") )  
  759.                 getWH();  
  760.             else  
  761.                 jQuery.swap( elem, props, getWH );  
  762.   
  763.             return Math.max(0, val);  
  764.         }  
  765.   
  766.         return jQuery.curCSS( elem, name, force );  
  767.     },  
  768.   
  769.     curCSS: function( elem, name, force ) {  
  770.         var ret, style = elem.style;  
  771.   
  772.         // We need to handle opacity special in IE  
  773.         if ( name == "opacity" && !jQuery.support.opacity ) {  
  774.             ret = jQuery.attr( style, "opacity" );  
  775.   
  776.             return ret == "" ?  
  777.                 "1" :  
  778.                 ret;  
  779.         }  
  780.   
  781.         // Make sure we're using the right name for getting the float value  
  782.         if ( name.match( /float/i ) )  
  783.             name = styleFloat;  
  784.   
  785.         if ( !force && style && style[ name ] )  
  786.             ret = style[ name ];  
  787.   
  788.         else if ( defaultView.getComputedStyle ) {  
  789.   
  790.             // Only "float" is needed here  
  791.             if ( name.match( /float/i ) )  
  792.                 name = "float";  
  793.   
  794.             name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();  
  795.   
  796.             var computedStyle = defaultView.getComputedStyle( elem, null );  
  797.   
  798.             if ( computedStyle )  
  799.                 ret = computedStyle.getPropertyValue( name );  
  800.   
  801.             // We should always get a number back from opacity  
  802.             if ( name == "opacity" && ret == "" )  
  803.                 ret = "1";  
  804.   
  805.         } else if ( elem.currentStyle ) {  
  806.             var camelCase = name.replace(/\-(\w)/g, function(all, letter){  
  807.                 return letter.toUpperCase();  
  808.             });  
  809.   
  810.             ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];  
  811.   
  812.             // From the awesome hack by Dean Edwards  
  813.             // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291  
  814.   
  815.             // If we're not dealing with a regular pixel number  
  816.             // but a number that has a weird ending, we need to convert it to pixels  
  817.             if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {  
  818.                 // Remember the original values  
  819.                 var left = style.left, rsLeft = elem.runtimeStyle.left;  
  820.   
  821.                 // Put in the new values to get a computed value out  
  822.                 elem.runtimeStyle.left = elem.currentStyle.left;  
  823.                 style.left = ret || 0;  
  824.                 ret = style.pixelLeft + "px";  
  825.   
  826.                 // Revert the changed values  
  827.                 style.left = left;  
  828.                 elem.runtimeStyle.left = rsLeft;  
  829.             }  
  830.         }  
  831.   
  832.         return ret;  
  833.     },  
  834.   
  835.     clean: function( elems, context, fragment ) {  
  836.         context = context || document;  
  837.   
  838.         // !context.createElement fails in IE with an error but returns typeof 'object'  
  839.         if ( typeof context.createElement === "undefined" )  
  840.             context = context.ownerDocument || context[0] && context[0].ownerDocument || document;  
  841.   
  842.         // If a single string is passed in and it's a single tag  
  843.         // just do a createElement and skip the rest  
  844.         if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {  
  845.             var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);  
  846.             if ( match )  
  847.                 return [ context.createElement( match[1] ) ];  
  848.         }  
  849.   
  850.         var ret = [], scripts = [], div = context.createElement("div");  
  851.   
  852.         jQuery.each(elems, function(i, elem){  
  853.             if ( typeof elem === "number" )  
  854.                 elem += '';  
  855.   
  856.             if ( !elem )  
  857.                 return;  
  858.   
  859.             // Convert html string into DOM nodes  
  860.             if ( typeof elem === "string" ) {  
  861.                 // Fix "XHTML"-style tags in all browsers  
  862.                 elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){  
  863.                     return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?  
  864.                         all :  
  865.                         front + "> + tag + ">";  
  866.                 });  
  867.   
  868.                 // Trim whitespace, otherwise indexOf won't work as expected  
  869.                 var tags = jQuery.trim( elem ).toLowerCase();  
  870.   
  871.                 var wrap =  
  872.                     // option or optgroup  
  873.                     !tags.indexOf(") &&  
  874.                     [ 1, """" ] ||  
  875.   
  876.                     !tags.indexOf(") &&  
  877.                     [ 1, "
    ""
    "
     ] ||  
  878.   
  879.                     tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&  
  880.                     [ 1, """
    "
     ] ||  
  881.   
  882.                     !tags.indexOf(") &&  
  883.                     [ 2, """
    "
     ] ||  
  884.   
  885.                     //  matched above  
  886.                     (!tags.indexOf(") || !tags.indexOf(")) &&  
  887.                     [ 3, """
    "
     ] ||  
  888.   
  889.                     !tags.indexOf(") &&  
  890.                     [ 2, """
    "
     ] ||  
  891.   
  892.                     // IE can't serialize  and 

你可能感兴趣的:(jquery)