]> source.dussan.org Git - jquery.git/commitdiff
Allow similarly named classes (regression from 9499) and switch class retrieval to...
authortimmywil <tim.willison@thisismedium.com>
Sun, 19 Jun 2011 22:58:47 +0000 (18:58 -0400)
committertimmywil <tim.willison@thisismedium.com>
Sun, 19 Jun 2011 22:58:47 +0000 (18:58 -0400)
src/attributes.js
test/unit/attributes.js

index ce7b35021134a8ffa63c5c05ec9b6092678fad7b..1e0e79f4b85a427c98f26240fe681e77f55bf4dd 100644 (file)
@@ -37,12 +37,12 @@ jQuery.fn.extend({
        },
 
        addClass: function( value ) {
-               var classNames, i, l, elem, setClass, c, cl;
+               var classNames, i, l, elem,
+                       setClass, c, cl;
 
                if ( jQuery.isFunction( value ) ) {
                        return this.each(function( j ) {
-                               var self = jQuery( this );
-                               self.addClass( value.call(this, j, self.attr("class") || "") );
+                               jQuery( this ).addClass( value.call(this, j, this.className) );
                        });
                }
 
@@ -57,11 +57,11 @@ jQuery.fn.extend({
                                                elem.className = value;
 
                                        } else {
-                                               setClass = elem.className;
+                                               setClass = " " + elem.className + " ";
 
                                                for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-                                                       if ( !~setClass.indexOf(classNames[ c ]) ) {
-                                                               setClass += " " + classNames[ c ];
+                                                       if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+                                                               setClass += classNames[ c ] + " ";
                                                        }
                                                }
                                                elem.className = jQuery.trim( setClass );
@@ -78,8 +78,7 @@ jQuery.fn.extend({
 
                if ( jQuery.isFunction( value ) ) {
                        return this.each(function( j ) {
-                               var self = jQuery( this );
-                               self.removeClass( value.call(this, j, self.attr("class")) );
+                               jQuery( this ).removeClass( value.call(this, j, this.className) );
                        });
                }
 
@@ -112,9 +111,8 @@ jQuery.fn.extend({
                        isBool = typeof stateVal === "boolean";
 
                if ( jQuery.isFunction( value ) ) {
-                       return this.each(function(i) {
-                               var self = jQuery(this);
-                               self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
+                       return this.each(function( i ) {
+                               jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
                        });
                }
 
index 831f729c34d92fd71b23272655b0a121b9161596..4716e5b532dfa526581b9b5be09b182194ed0356 100644 (file)
@@ -762,7 +762,8 @@ test("val(select) after form.reset() (Bug #2551)", function() {
 }); 
 
 var testAddClass = function(valueObj) {
-       expect(7);
+       expect(9);
+
        var div = jQuery("div");
        div.addClass( valueObj("test") );
        var pass = true;
@@ -791,10 +792,16 @@ var testAddClass = function(valueObj) {
        div.addClass( valueObj("bar baz") );
        equals( div.attr("class"), "foo bar baz", "Make sure there isn't too much trimming." );
        
-       div.removeAttr("class");
+       div.removeClass();
        div.addClass( valueObj("foo") ).addClass( valueObj("foo") )
        equal( div.attr("class"), "foo", "Do not add the same class twice in separate calls." );
-       div.removeAttr("class");
+
+       div.addClass( valueObj("fo") );
+       equal( div.attr("class"), "foo fo", "Adding a similar class does not get interrupted." );
+       div.removeClass().addClass("wrap2");
+       ok( div.addClass("wrap").hasClass("wrap"), "Can add similarly named classes");
+
+       div.removeClass();
        div.addClass( valueObj("bar bar") );
        equal( div.attr("class"), "bar", "Do not add the same class twice in the same call." );
 };
@@ -959,7 +966,7 @@ test("toggleClass(Function[, boolean])", function() {
 test("toggleClass(Fucntion[, boolean]) with incoming value", function() {
        expect(14);
 
-       var e = jQuery("#firstp"), old = e.attr("class");
+       var e = jQuery("#firstp"), old = e.attr("class") || "";
        ok( !e.is(".test"), "Assert class not present" );
 
        e.toggleClass(function(i, val) {