Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Allow similarly named classes (regression from 9499) and switch class…

… retrieval to property when passing class to value functions. Fixes #9617.
  • Loading branch information...
commit 96501d38a935187461d45c40f17f8327b2e7cd91 1 parent 124817e
timmywil authored
Showing with 20 additions and 15 deletions.
  1. +9 −11 src/attributes.js
  2. +11 −4 test/unit/attributes.js
20 src/attributes.js
View
@@ -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 );
});
}
15 test/unit/attributes.js
View
@@ -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();
Timo Tijhof
Krinkle added a note

What is .removeClass() supposed to do here?

edit: Ah, value === undefined -> className = "", I didn't know that. has been supported ever since 96dd06e. Nice :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
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) {

2 comments on commit 96501d3

Timmy Willison
Collaborator

As the bugs site is currently down, I'm grouping the latter part with the first bug. For more information on what I'm fixing there, here's a test case:

Compare jQuery version 1.5.2 and 1.6. - http://jsfiddle.net/timmywil/HqCLn/2/
You'll see "" and "", then undefined and "".

When no class is present, empty string should be passed to value functions. This wasn't caught in the tests in 1.6 because it was just comparing what was returning by attr with what was returned by attr. Not a big one, but will now be consistent and slightly faster as there is no longer a call to attr.

I'll add this info to the bug ticket when the site is back.

Timmy Willison
Collaborator

Here's the second issue that was fixed in this commit: #9624

Timo Tijhof

What is .removeClass() supposed to do here?

edit: Ah, value === undefined -> className = "", I didn't know that. has been supported ever since 96dd06e. Nice :)

Please sign in to comment.
Something went wrong with that request. Please try again.