Fix for #806
[jquery.git] / src / jquery / jquery.js
index 86d2bd3..f756b67 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * jQuery @VERSION - New Wave Javascript
  *
- * Copyright (c) 2006 John Resig (jquery.com)
+ * Copyright (c) 2007 John Resig (jquery.com)
  * Dual licensed under the MIT (MIT-LICENSE.txt)
  * and GPL (GPL-LICENSE.txt) licenses.
  *
@@ -38,14 +38,14 @@ var jQuery = function(a,c) {
        
        // Handle HTML strings
        if ( typeof a  == "string" ) {
+               // HANDLE: $(html) -> $(array)
                var m = /^[^<]*(<.+>)[^>]*$/.exec(a);
-
-               a = m ?
-                       // HANDLE: $(html) -> $(array)
-                       jQuery.clean( [ m[1] ] ) :
+               if ( m )
+                       a = jQuery.clean( [ m[1] ] );
                
-                       // HANDLE: $(expr)
-                       jQuery.find( a, c );
+               // HANDLE: $(expr)
+               else
+                       return new jQuery( c ).find( a );
        }
        
        return this.setArray(
@@ -122,11 +122,6 @@ var $ = jQuery;
  * This function also accepts XML Documents and Window objects
  * as valid arguments (even though they are not DOM Elements).
  *
- * @example $(document).find("div > p")
- * @before <p>one</p> <div><p>two</p></div> <p>three</p>
- * @result [ <p>two</p> ]
- * @desc Same as $("div > p") because the document
- *
  * @example $(document.body).background( "black" );
  * @desc Sets the background color of the page to black.
  *
@@ -416,10 +411,16 @@ jQuery.fn = jQuery.prototype = {
         * @result <img src="test.jpg" title="test.jpg" />
         * @desc Sets title attribute from src attribute.
         *
+        * @example $("img").attr("title", function(index) { return this.title + (i + 1); });
+        * @before <img title="pic" /><img title="pic" /><img title="pic" />
+        * @result <img title="pic1" /><img title="pic2" /><img title="pic3" />
+        * @desc Enumerate title attribute.
+        *
         * @name attr
         * @type jQuery
         * @param String key The name of the property to set.
         * @param Function value A function returning the value to set.
+        *                Scope: Current element, argument: Index of current element
         * @cat DOM/Attributes
         */
        attr: function( key, value, type ) {
@@ -435,12 +436,12 @@ jQuery.fn = jQuery.prototype = {
                        }
                
                // Check to see if we're setting style values
-               return this.each(function(){
+               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)
+                                       prop, jQuery.prop(this, obj[prop], type, index, prop)
                                );
                });
        },
@@ -984,7 +985,7 @@ jQuery.fn = jQuery.prototype = {
        add: function(t) {
                return this.pushStack( jQuery.merge(
                        this.get(),
-                       typeof t == "string" ? jQuery(t).get() : t )
+                       typeof t == "string" ? jQuery(t).get() : t.length ? t : [t] )
                );
        },
 
@@ -1261,13 +1262,16 @@ jQuery.extend({
                return obj;
        },
        
-       prop: function(elem, value, type){
+       prop: function(elem, value, type, index, prop){
                        // Handle executable functions
                        if ( jQuery.isFunction( value ) )
-                               return value.call( elem );
+                               return value.call( elem, [index] );
+                               
+                       // exclude the following css properties to add px
+                       var exclude = /z-?index|font-?weight|opacity/i;
 
                        // Handle passing in a number to a CSS property
-                       if ( value.constructor == Number && type == "curCSS" )
+                       if ( value.constructor == Number && type == "curCSS" && !exclude.test(prop) )
                                return value + "px";
 
                        return value;
@@ -1552,21 +1556,22 @@ jQuery.extend({
        /**
         * Merge two arrays together, removing all duplicates.
         *
-        * The new array is: All the results from the first array, followed
-        * by the unique results from the second array.
+        * The result is the altered first argument with
+        * the unique elements from the second array added.
         *
         * @example $.merge( [0,1,2], [2,3,4] )
         * @result [0,1,2,3,4]
         * @desc Merges two arrays, removing the duplicate 2
         *
-        * @example $.merge( [3,2,1], [4,3,2] )
-        * @result [3,2,1,4]
+        * @example var array = [3,2,1];
+        * $.merge( array, [4,3,2] )
+        * @result array == [3,2,1,4]
         * @desc Merges two arrays, removing the duplicates 3 and 2
         *
         * @name $.merge
         * @type Array
-        * @param Array first The first array to merge.
-        * @param Array second The second array to merge.
+        * @param Array first The first array to merge, the unique elements of second added.
+        * @param Array second The second array to merge into the first, unaltered.
         * @cat JavaScript
         */
        merge: function(first, second) {