From 96501d38a935187461d45c40f17f8327b2e7cd91 Mon Sep 17 00:00:00 2001 From: timmywil Date: Sun, 19 Jun 2011 18:58:47 -0400 Subject: [PATCH] Allow similarly named classes (regression from 9499) and switch class retrieval to property when passing class to value functions. Fixes #9617. --- src/attributes.js | 20 +++++++++----------- test/unit/attributes.js | 15 +++++++++++---- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/attributes.js b/src/attributes.js index ce7b3502..1e0e79f4 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -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 ); }); } diff --git a/test/unit/attributes.js b/test/unit/attributes.js index 831f729c..4716e5b5 100644 --- a/test/unit/attributes.js +++ b/test/unit/attributes.js @@ -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) {