Added test for css(String, Function) and css(Object) where values are Functions; fixed css(Object)

This commit is contained in:
Yehuda Katz 2009-07-12 18:31:26 +00:00
parent d857315967
commit e8eff25f3b
2 changed files with 70 additions and 3 deletions

View File

@ -21,6 +21,13 @@ jQuery.fn.css = function( name, value ) {
options[ name ] = value; options[ name ] = value;
} }
} }
var isFunction = {};
// For each value, determine whether it's a Function so we don't
// need to determine it again for each element
for ( var prop in options )
isFunction[prop] = jQuery.isFunction( options[prop] );
// For each element... // For each element...
for ( var i = 0, l = this.length; i < l; i++ ) { for ( var i = 0, l = this.length; i < l; i++ ) {
@ -30,9 +37,7 @@ jQuery.fn.css = function( name, value ) {
for ( var prop in options ) { for ( var prop in options ) {
value = options[prop]; value = options[prop];
if ( isFunction ) { if ( isFunction[prop] ) value = value.call( elem, i );
value = value.call( elem, i );
}
if ( typeof value === "number" && !exclude.test(prop) ) { if ( typeof value === "number" && !exclude.test(prop) ) {
value = value + "px"; value = value + "px";

View File

@ -81,6 +81,68 @@ test("css(String, Object)", function() {
equals( jQuery("#t2037 .hidden").css("display"), "none", "Make sure browser thinks it is hidden" ); equals( jQuery("#t2037 .hidden").css("display"), "none", "Make sure browser thinks it is hidden" );
}); });
test("css(String, Function)", function() {
try {
expect(3);
var colors = ["red", "green", "blue"];
jQuery("<div id='cssFunctionTest'><div class='cssFunction'></div>" +
"<div class='cssFunction'></div>" +
"<div class='cssFunction'></div></div>")
.appendTo("body");
var index = 0;
jQuery("#cssFunctionTest div").css("color", function() {
var color = colors[index];
index++;
return color;
});
index = 0;
jQuery("#cssFunctionTest div").each(function() {
equals( jQuery(this).css("color"), colors[index], "Div #" + index + " should be " + colors[index] );
index++;
});
} finally {
jQuery("#cssFunctionTest").remove();
}
});
test("css(Object) where values are Functions", function() {
try {
expect(3);
var colors = ["red", "green", "blue"];
jQuery("<div id='cssFunctionTest'><div class='cssFunction'></div>" +
"<div class='cssFunction'></div>" +
"<div class='cssFunction'></div></div>")
.appendTo("body");
var index = 0;
jQuery("#cssFunctionTest div").css({color: function() {
var color = colors[index];
index++;
return color;
}});
index = 0;
jQuery("#cssFunctionTest div").each(function() {
equals( jQuery(this).css("color"), colors[index], "Div #" + index + " should be " + colors[index] );
index++;
});
} finally {
jQuery("#cssFunctionTest").remove();
}
});
test("jQuery.css(elem, 'height') doesn't clear radio buttons (bug #1095)", function () { test("jQuery.css(elem, 'height') doesn't clear radio buttons (bug #1095)", function () {
expect(4); expect(4);