]> source.dussan.org Git - jquery.git/commitdiff
Don't let removeClass create attributes
authorRichard Gibson <richard.gibson@gmail.com>
Tue, 27 Nov 2012 14:46:06 +0000 (09:46 -0500)
committerRichard Gibson <richard.gibson@gmail.com>
Tue, 27 Nov 2012 14:46:06 +0000 (09:46 -0500)
src/attributes.js
test/unit/attributes.js

index ac4b3c866025a6692b620c300ec5b5bc949531bb..bc065481cc5ede6b240dfe767db619fd40ca8fbe 100644 (file)
@@ -51,11 +51,12 @@ jQuery.fn.extend({
 
                        for ( ; i < len; i++ ) {
                                elem = this[ i ];
+                               cur = elem.nodeType === 1 && ( elem.className ?
+                                       ( " " + elem.className + " " ).replace( rclass, " " ) :
+                                       " "
+                               );
 
-                               if ( elem.nodeType === 1 ) {
-                                       cur = elem.className ?
-                                               ( " " + elem.className + " " ).replace( rclass, " " ) :
-                                               " ";
+                               if ( cur ) {
                                        j = 0;
                                        while ( (clazz = classes[j++]) ) {
                                                if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
@@ -87,11 +88,13 @@ jQuery.fn.extend({
 
                        for ( ; i < len; i++ ) {
                                elem = this[ i ];
-                               if ( elem.nodeType === 1 ) {
-                                       // This expression is here for better compressibility (see addClass)
-                                       cur = elem.className ?
-                                               ( " " + elem.className + " " ).replace( rclass, " " ) :
-                                               " ";
+                               // This expression is here for better compressibility (see addClass)
+                               cur = elem.nodeType === 1 && ( elem.className ?
+                                       ( " " + elem.className + " " ).replace( rclass, " " ) :
+                                       ""
+                               );
+
+                               if ( cur ) {
                                        j = 0;
                                        while ( (clazz = classes[j++]) ) {
                                                // Remove *all* instances
index 4e3ae6e4a4d4716553fb86292d2fbd599f8349e0..7b2f21ad0e8bad7a357d67623eba1644bee0b61e 100644 (file)
@@ -1052,38 +1052,36 @@ test( "addClass(Function) with incoming value", function() {
 });
 
 var testRemoveClass = function(valueObj) {
-       expect( 7 );
-
-       var $divs = jQuery("div");
+       expect( 8 );
 
-       $divs.addClass("test").removeClass( valueObj("test") );
+       var $set = jQuery("div"),
+               div = document.createElement("div");
 
-       ok( !$divs.is(".test"), "Remove Class" );
+       $set.addClass("test").removeClass( valueObj("test") );
 
-       QUnit.reset();
-       $divs = jQuery("div");
+       ok( !$set.is(".test"), "Remove Class" );
 
-       $divs.addClass("test").addClass("foo").addClass("bar");
-       $divs.removeClass( valueObj("test") ).removeClass( valueObj("bar") ).removeClass( valueObj("foo") );
+       $set.addClass("test").addClass("foo").addClass("bar");
+       $set.removeClass( valueObj("test") ).removeClass( valueObj("bar") ).removeClass( valueObj("foo") );
 
-       ok( !$divs.is(".test,.bar,.foo"), "Remove multiple classes" );
-
-       QUnit.reset();
-       $divs = jQuery("div");
+       ok( !$set.is(".test,.bar,.foo"), "Remove multiple classes" );
 
        // Make sure that a null value doesn't cause problems
-       $divs.eq( 0 ).addClass("test").removeClass( valueObj( null ) );
-       ok( $divs.eq( 0 ).is(".test"), "Null value passed to removeClass" );
+       $set.eq( 0 ).addClass("expected").removeClass( valueObj( null ) );
+       ok( $set.eq( 0 ).is(".expected"), "Null value passed to removeClass" );
 
-       $divs.eq( 0 ).addClass("test").removeClass( valueObj("") );
-       ok( $divs.eq( 0 ).is(".test"), "Empty string passed to removeClass" );
+       $set.eq( 0 ).addClass("expected").removeClass( valueObj("") );
+       ok( $set.eq( 0 ).is(".expected"), "Empty string passed to removeClass" );
 
        // using contents will get regular, text, and comment nodes
-       var j = jQuery("#nonnodes").contents();
-       j.removeClass( valueObj("asdf") );
-       ok( !j.hasClass("asdf"), "Check node,textnode,comment for removeClass" );
+       $set = jQuery("#nonnodes").contents();
+       $set.removeClass( valueObj("asdf") );
+       ok( !$set.hasClass("asdf"), "Check node,textnode,comment for removeClass" );
+
+
+       jQuery( div ).removeClass( valueObj("foo") );
+       strictEqual( jQuery( div ).attr("class"), undefined, "removeClass doesn't create a class attribute" );
 
-       var div = document.createElement("div");
        div.className = " test foo ";
 
        jQuery( div ).removeClass( valueObj("foo") );