X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fattributes.js;h=402c3dc04e621b1344a1ea65d5e4965d9b3ed85b;hb=100ed686426b8b404b094b8c8086aefce715f91a;hp=8d889fc97ece1e8e8ba9dbfcb23874ec4c359e09;hpb=da51cd0e43d6d61e0d3d6c197cef1e658bad29bc;p=jquery.git diff --git a/src/attributes.js b/src/attributes.js index 8d889fc..402c3dc 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -1,14 +1,16 @@ +var rclass = /[\n\t]/g; + jQuery.fn.extend({ attr: function( name, value ) { return access(this, name, value, true, jQuery.attr); }, addClass: function( value ) { - if(jQuery.isFunction(value)) { - return this.each(function() { - jQuery(this).addClass( value.call(this) ); - }); - } + if(jQuery.isFunction(value)) { + return this.each(function() { + jQuery(this).addClass( value.call(this) ); + }); + } if ( value && typeof value === "string" ) { var classNames = (value || "").split(/\s+/); @@ -35,11 +37,11 @@ jQuery.fn.extend({ }, removeClass: function( value ) { - if(jQuery.isFunction(value)) { - return this.each(function() { - jQuery(this).removeClass( value.call(this) ); - }); - } + 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+/); @@ -49,7 +51,7 @@ jQuery.fn.extend({ if ( elem.nodeType === 1 && elem.className ) { if ( value ) { - var className = " " + elem.className + " "; + var className = (" " + elem.className + " ").replace(rclass, " "); for ( var c = 0, cl = classNames.length; c < cl; c++ ) { className = className.replace(" " + classNames[c] + " ", " "); } @@ -67,7 +69,7 @@ jQuery.fn.extend({ hasClass: function( selector ) { var className = " " + selector + " "; for ( var i = 0, l = this.length; i < l; i++ ) { - if ( (" " + this[i].className + " ").indexOf( className ) > -1 ) { + if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { return true; } } @@ -164,19 +166,12 @@ jQuery.fn.extend({ jQuery.each({ removeAttr: function( name ) { jQuery.attr( this, name, "" ); - if (this.nodeType == 1) { + if ( this.nodeType === 1 ) { this.removeAttribute( name ); } }, 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 @@ -198,21 +193,33 @@ jQuery.each({ } }, function(name, fn){ jQuery.fn[ name ] = function(val, state){ - if( jQuery.isFunction( val ) ) { - return this.each(function() { jQuery(this)[ name ]( val.call(this), state ); }); - } + if( jQuery.isFunction( val ) ) { + return this.each(function() { jQuery(this)[ name ]( val.call(this), state ); }); + } return this.each( fn, arguments ); }; }); jQuery.extend({ + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + attr: function( elem, name, value ) { // don't set attributes on text and comment nodes if (!elem || elem.nodeType == 3 || elem.nodeType == 8) { return undefined; } - if ( name in jQuery.fn && name !== "attr" ) { + + if ( name in jQuery.attrFn && value !== undefined ) { return jQuery(elem)[name](value); }