Skip to content
Permalink
Browse files

Check classes passed for duplicates. Fixes #9499.

  • Loading branch information...
timmywil
timmywil committed Jun 8, 2011
1 parent 0a80be6 commit db437be6e31c924aade13bb719f9facc122b3d9c
Showing with 39 additions and 27 deletions.
  1. +25 −22 src/attributes.js
  2. +2 −2 src/effects.js
  3. +1 −1 test/data/testsuite.css
  4. +11 −2 test/unit/attributes.js
@@ -37,30 +37,31 @@ jQuery.fn.extend({
},

addClass: function( value ) {
var classNames, i, l, elem, setClass, c, cl;

if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this);
self.addClass( value.call(this, i, self.attr("class") || "") );
return this.each(function( j ) {
var self = jQuery( this );
self.addClass( value.call(this, j, self.attr("class") || "") );
});
}

if ( value && typeof value === "string" ) {
var classNames = (value || "").split( rspace );
classNames = value.split( rspace );

for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
for ( i = 0, l = this.length; i < l; i++ ) {
elem = this[ i ];

if ( elem.nodeType === 1 ) {
if ( !elem.className ) {
if ( !elem.className && classNames.length === 1 ) {
elem.className = value;

} else {
var className = " " + elem.className + " ",
setClass = elem.className;
setClass = elem.className;

for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
setClass += " " + classNames[c];
for ( c = 0, cl = classNames.length; c < cl; c++ ) {
if ( !~setClass.indexOf(classNames[ c ]) ) {
setClass += " " + classNames[ c ];
}
}
elem.className = jQuery.trim( setClass );
@@ -73,24 +74,26 @@ jQuery.fn.extend({
},

removeClass: function( value ) {
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
self.removeClass( value.call(this, i, self.attr("class")) );
var classNames, i, l, elem, className, c, cl;

if ( jQuery.isFunction( value ) ) {
return this.each(function( j ) {
var self = jQuery( this );
self.removeClass( value.call(this, j, self.attr("class")) );
});
}

if ( (value && typeof value === "string") || value === undefined ) {
var classNames = (value || "").split( rspace );
classNames = (value || "").split( rspace );

for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
for ( i = 0, l = this.length; i < l; i++ ) {
elem = this[ i ];

if ( elem.nodeType === 1 && elem.className ) {
if ( value ) {
var className = (" " + elem.className + " ").replace(rclass, " ");
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
className = className.replace(" " + classNames[c] + " ", " ");
className = (" " + elem.className + " ").replace( rclass, " " );
for ( c = 0, cl = classNames.length; c < cl; c++ ) {
className = className.replace(" " + classNames[ c ] + " ", " ");
}
elem.className = jQuery.trim( className );

@@ -15,8 +15,8 @@ var elemdisplay = {},
],
fxNow,
requestAnimationFrame = window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame;
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame;

jQuery.fn.extend({
show: function( speed, easing, callback ) {
@@ -119,5 +119,5 @@ sup { display: none; }
dfn { display: none; }

/* #9239 Attach a background to the body( avoid crashes in removing the test element in support ) */
body, div { background: url(http://www.ctemploymentlawblog.com/test.jpg) no-repeat -1000px 0; }
body, div { background: url(http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif) no-repeat -1000px 0; }

@@ -761,12 +761,14 @@ test("val(select) after form.reset() (Bug #2551)", function() {
});

var testAddClass = function(valueObj) {
expect(5);
expect(7);
var div = jQuery("div");
div.addClass( valueObj("test") );
var pass = true;
for ( var i = 0; i < div.size(); i++ ) {
if ( div.get(i).className.indexOf("test") == -1 ) pass = false;
if ( !~div.get(i).className.indexOf("test") ) {
pass = false;
}
}
ok( pass, "Add Class" );

@@ -787,6 +789,13 @@ var testAddClass = function(valueObj) {
div.attr("class", "foo");
div.addClass( valueObj("bar baz") );
equals( div.attr("class"), "foo bar baz", "Make sure there isn't too much trimming." );

div.removeAttr("class");
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("bar bar") );
equal( div.attr("class"), "bar", "Do not add the same class twice in the same call." );
};

test("addClass(String)", function() {

0 comments on commit db437be

Please sign in to comment.
You can’t perform that action at this time.