var rclass = /[\t\r\n\f]/g;
+function getClass( elem ) {
+ return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
jQuery.fn.extend({
addClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
+ var classes, elem, cur, curValue, clazz, j, finalValue,
proceed = typeof value === "string" && value,
i = 0,
len = this.length;
if ( jQuery.isFunction( value ) ) {
return this.each(function( j ) {
- jQuery( this ).addClass( value.call( this, j, this.className ) );
+ jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
});
}
for ( ; i < len; i++ ) {
elem = this[ i ];
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- " "
- );
+ curValue = getClass( elem );
+ cur = elem.nodeType === 1 &&
+ ( " " + curValue + " " ).replace( rclass, " " );
if ( cur ) {
j = 0;
// only assign if different to avoid unneeded rendering.
finalValue = jQuery.trim( cur );
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
+ if ( curValue !== finalValue ) {
+ elem.setAttribute( "class", finalValue );
}
}
}
},
removeClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
+ var classes, elem, cur, curValue, clazz, j, finalValue,
proceed = arguments.length === 0 || typeof value === "string" && value,
i = 0,
len = this.length;
if ( jQuery.isFunction( value ) ) {
return this.each(function( j ) {
- jQuery( this ).removeClass( value.call( this, j, this.className ) );
+ jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
});
}
if ( proceed ) {
for ( ; i < len; i++ ) {
elem = this[ i ];
+ curValue = getClass( elem );
+
// This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- ""
- );
+ cur = elem.nodeType === 1 &&
+ ( " " + curValue + " " ).replace( rclass, " " );
if ( cur ) {
j = 0;
// Only assign if different to avoid unneeded rendering.
finalValue = value ? jQuery.trim( cur ) : "";
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
+ if ( curValue !== finalValue ) {
+ elem.setAttribute( "class", finalValue );
}
}
}
if ( jQuery.isFunction( value ) ) {
return this.each(function( i ) {
jQuery( this ).toggleClass(
- value.call(this, i, this.className, stateVal), stateVal
+ value.call( this, i, getClass( this ), stateVal ),
+ stateVal
);
});
}
return this.each(function() {
+ var className, i, self, classNames;
+
if ( type === "string" ) {
+
// Toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- classNames = value.match( rnotwhite ) || [];
+ i = 0;
+ self = jQuery( this );
+ classNames = value.match( rnotwhite ) || [];
+
+ while ( ( className = classNames[ i++ ] ) ) {
- while ( (className = classNames[ i++ ]) ) {
// Check each className given, space separated list
if ( self.hasClass( className ) ) {
self.removeClass( className );
// Toggle whole class name
} else if ( value === undefined || type === "boolean" ) {
- if ( this.className ) {
+ className = getClass( this );
+ if ( className ) {
+
// store className if set
- dataPriv.set( this, "__className__", this.className );
+ dataPriv.set( this, "__className__", className );
}
// If the element has a class name or if we're passed `false`,
// then remove the whole classname (if there was one, the above saved it).
// Otherwise bring back whatever was previously saved (if anything),
// falling back to the empty string if nothing was stored.
- this.className = this.className || value === false ?
- "" :
- dataPriv.get( this, "__className__" ) || "";
+ if ( this.setAttribute ) {
+ this.setAttribute( "class",
+ className || value === false ?
+ "" :
+ dataPriv.get( this, "__className__" ) || ""
+ );
+ }
}
});
},
l = this.length;
for ( ; i < l; i++ ) {
if ( this[i].nodeType === 1 &&
- (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
-
+ ( " " + getClass( this[i] ) + " " ).replace( rclass, " " )
+ .indexOf( className ) > -1
+ ) {
return true;
}
}