Enhanced attr(String, Function) to pass through index of current element

This commit is contained in:
Jörn Zaefferer 2007-01-16 09:18:21 +00:00
parent 8b51bfbd32
commit c8b7881c73
2 changed files with 12 additions and 5 deletions

View file

@ -82,8 +82,9 @@ test("attr(String)", function() {
}); });
test("attr(String, Function)", 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('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() { test("attr(Hash)", function() {

14
src/jquery/jquery.js vendored
View file

@ -411,10 +411,16 @@ jQuery.fn = jQuery.prototype = {
* @result <img src="test.jpg" title="test.jpg" /> * @result <img src="test.jpg" title="test.jpg" />
* @desc Sets title attribute from src attribute. * @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 * @name attr
* @type jQuery * @type jQuery
* @param String key The name of the property to set. * @param String key The name of the property to set.
* @param Function value A function returning the value to set. * @param Function value A function returning the value to set.
* Scope: Current element, argument: Index of current element
* @cat DOM/Attributes * @cat DOM/Attributes
*/ */
attr: function( key, value, type ) { attr: function( key, value, type ) {
@ -430,12 +436,12 @@ jQuery.fn = jQuery.prototype = {
} }
// Check to see if we're setting style values // Check to see if we're setting style values
return this.each(function(){ return this.each(function(index){
// Set all the styles // Set all the styles
for ( var prop in obj ) for ( var prop in obj )
jQuery.attr( jQuery.attr(
type ? this.style : this, 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; return obj;
}, },
prop: function(elem, value, type){ prop: function(elem, value, type, index){
// Handle executable functions // Handle executable functions
if ( jQuery.isFunction( value ) ) if ( jQuery.isFunction( value ) )
return value.call( elem ); return value.call( elem, [index] );
// Handle passing in a number to a CSS property // Handle passing in a number to a CSS property
if ( value.constructor == Number && type == "curCSS" ) if ( value.constructor == Number && type == "curCSS" )