diff --git a/src/jquery/coreTest.js b/src/jquery/coreTest.js
index f736d4d70..5dd9d8058 100644
--- a/src/jquery/coreTest.js
+++ b/src/jquery/coreTest.js
@@ -82,8 +82,9 @@ test("attr(String)", function() {
});
test("attr(String, Function)", function() {
- expect(1);
+ expect(2);
ok( $('#text1').attr('value', function() { return this.id })[0].value == "text1", "Set value from id" );
+ ok( $('#text1').attr('title', function(i) { return i }).attr('title') == "0", "Set value with an index");
});
test("attr(Hash)", function() {
diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js
index e46fc7386..f986d28f8 100644
--- a/src/jquery/jquery.js
+++ b/src/jquery/jquery.js
@@ -411,10 +411,16 @@ jQuery.fn = jQuery.prototype = {
* @result
* @desc Sets title attribute from src attribute.
*
+ * @example $("img").attr("title", function(index) { return this.title + (i + 1); });
+ * @before
+ * @result
+ * @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" )