/** * jQuery.alterClass * * For altering classes * * @param removals (wildcards are possible) * [@param] additions * @return jQuery object * * @author Axel Jack Fuchs (Cologne, Germany) * @date 01-03-2016 10:33 * @url https://gist.github.com/jackfuchs/3583421f2b21553efb364868e8c17be0 * * Example * Before:
* Alter: $('div').alterClass('remove-foo-* remove-bar', 'add-foo add-bar'); * Result:
*/ $.fn.alterClass = function (removals, additions) { var self = this; if (removals.indexOf('*') === -1) { 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); };