Enhanced attr(String, Function) to pass through index of current element
authorJörn Zaefferer <joern.zaefferer@gmail.com>
Tue, 16 Jan 2007 09:18:21 +0000 (09:18 +0000)
committerJörn Zaefferer <joern.zaefferer@gmail.com>
Tue, 16 Jan 2007 09:18:21 +0000 (09:18 +0000)
src/jquery/coreTest.js
src/jquery/jquery.js

index f736d4d..5dd9d80 100644 (file)
@@ -82,8 +82,9 @@ test("attr(String)", function() {
 });\r
 \r
 test("attr(String, Function)", function() {\r
-       expect(1);\r
+       expect(2);\r
        ok( $('#text1').attr('value', function() { return this.id })[0].value == "text1", "Set value from id" );\r
+       ok( $('#text1').attr('title', function(i) { return i }).attr('title') == "0", "Set value with an index");\r
 });\r
 \r
 test("attr(Hash)", function() {\r
index e46fc73..f986d28 100644 (file)
@@ -411,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 ) {
@@ -430,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)
                                );
                });
        },
@@ -1256,10 +1262,10 @@ jQuery.extend({
                return obj;
        },
        
-       prop: function(elem, value, type){
+       prop: function(elem, value, type, index){
                        // Handle executable functions
                        if ( jQuery.isFunction( value ) )
-                               return value.call( elem );
+                               return value.call( elem, [index] );
 
                        // Handle passing in a number to a CSS property
                        if ( value.constructor == Number && type == "curCSS" )