Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
jQuery alterClass plugin: Remove element classes with wildcard matching. Optionally add classes.
/**
* jQuery alterClass plugin
*
* Remove element classes with wildcard matching. Optionally add classes:
* $( '#foo' ).alterClass( 'foo-* bar-*', 'foobar' )
*
* Copyright (c) 2011 Pete Boere (the-echoplex.net)
* Free under terms of the MIT license: http://www.opensource.org/licenses/mit-license.php
*
*/
(function ( $ ) {
$.fn.alterClass = function ( removals, additions ) {
var self = this;
if ( removals.indexOf( '*' ) === -1 ) {
// Use native jQuery methods if there is no wildcard matching
self.removeClass( removals );
return !additions ? self : self.addClass( additions );
}
var patt = new RegExp( '\\s' +
removals.
replace( /\*/g, '[A-Za-z0-9-_]+' ).
split( ' ' ).
join( '\\s|\\s' ) +
'\\s', 'g' );
self.each( function ( i, it ) {
var cn = ' ' + it.className + ' ';
while ( patt.test( cn ) ) {
cn = cn.replace( patt, ' ' );
}
it.className = $.trim( cn );
});
return !additions ? self : self.addClass( additions );
};
})( jQuery );

This is really useful! Is it possible to replace many classes pattern with one call? For example
'alert-* status-* type-*'

Currently this method only seems to work if the classes are in that order. Ideally, it would work regardless of the order.

Thoughts?

mfyuce commented Jan 17, 2014

Good work! Very helpful...

Thanks for the code, very helpful for me !

Great plugin it should be implement in jquery 1.12 or 2.2 !

Good work!

bonny commented Apr 9, 2015

Great function – thanks a lot.

It also works with Zepto. Just pass in Zepto instead of jQuery and it just works.

Great Work! Thanks a lot ;)

danyj commented Nov 1, 2015

💯

cdillon commented Dec 14, 2015

Very nice! Thanks a ton!

Wonderful, thank you very much!

tcomert commented Mar 21, 2016

Very useful, thanks

Good work :)

anand9 commented May 19, 2016

thanks a lot.. 👍

Nice. Very handy. +1

xD3VHAX commented Jan 22, 2017

Nice ! thanks a lot

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment