X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fattributes.js;h=8d889fc97ece1e8e8ba9dbfcb23874ec4c359e09;hb=da51cd0e43d6d61e0d3d6c197cef1e658bad29bc;hp=b5a29e159e56e38139525aeea7317b22800af0ff;hpb=ddb86f8d5bd1bd21b2beeeea55baf505b47dfed5;p=jquery.git diff --git a/src/attributes.js b/src/attributes.js index b5a29e1..8d889fc 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -4,6 +4,12 @@ jQuery.fn.extend({ }, addClass: function( value ) { + if(jQuery.isFunction(value)) { + return this.each(function() { + jQuery(this).addClass( value.call(this) ); + }); + } + if ( value && typeof value === "string" ) { var classNames = (value || "").split(/\s+/); @@ -29,6 +35,12 @@ jQuery.fn.extend({ }, removeClass: function( value ) { + if(jQuery.isFunction(value)) { + return this.each(function() { + jQuery(this).removeClass( value.call(this) ); + }); + } + if ( (value && typeof value === "string") || value === undefined ) { var classNames = (value || "").split(/\s+/); @@ -113,7 +125,7 @@ jQuery.fn.extend({ // Typecast once if the value is a number if ( typeof value === "number" ) { value += ''; - } + } var val = value; return this.each(function(){ @@ -122,10 +134,10 @@ jQuery.fn.extend({ // Typecast each time if the value is a Function and the appended // value is therefore different each time. if( typeof val === "number" ) { - val += ''; + val += ''; } } - + if ( this.nodeType != 1 ) { return; } @@ -158,6 +170,13 @@ jQuery.each({ }, toggleClass: function( classNames, state ) { + if( jQuery.isFunction(classNames) ) { + return this.each(function() { + console.log(this); + jQuery(this).toggleClass( classNames.call(this), state ); + }); + } + var type = typeof classNames; if ( type === "string" ) { // toggle individual class names @@ -178,7 +197,11 @@ jQuery.each({ } } }, function(name, fn){ - jQuery.fn[ name ] = function(){ + jQuery.fn[ name ] = function(val, state){ + if( jQuery.isFunction( val ) ) { + return this.each(function() { jQuery(this)[ name ]( val.call(this), state ); }); + } + return this.each( fn, arguments ); }; }); @@ -192,7 +215,7 @@ jQuery.extend({ if ( name in jQuery.fn && name !== "attr" ) { return jQuery(elem)[name](value); } - + var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), // Whether we are setting (or getting) set = value !== undefined; @@ -218,7 +241,13 @@ jQuery.extend({ if ( name == "type" && /(button|input)/i.test(elem.nodeName) && elem.parentNode ) { throw "type property can't be changed"; } - elem[ name ] = value; + // browsers index elements by id/name on forms, give priority to attributes. + if( jQuery.nodeName( elem, "form" ) ) { + // convert the value to a string (all browsers do this but IE) see #1070 + elem.setAttribute( name, "" + value ); + } else { + elem[ name ] = value; + } } // browsers index elements by id/name on forms, give priority to attributes.