Created
June 6, 2012 12:31
-
-
Save jakubp/2881585 to your computer and use it in GitHub Desktop.
jQuery plugin to remove classes with given prefix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Remove classes that have given prefix | |
// Example: | |
// You have an element with classes "apple juiceSmall juiceBig banana" | |
// You run: | |
// $elem.removeClassPrefix('juice'); | |
// The resulting classes are "apple banana" | |
// NOTE: discussion of implementation techniques for this, including why simple RegExp with word boundaries isn't correct: | |
// http://stackoverflow.com/questions/57812/jquery-remove-all-classes-that-begin-with-a-certain-string#comment14232343_58533 | |
(function ( $ ) { | |
$.fn.removeClassPrefix = function (prefix) { | |
this.each( function ( i, it ) { | |
var classes = it.className.split(" ").map(function (item) { | |
return item.indexOf(prefix) === 0 ? "" : item; | |
}); | |
it.className = classes.join(" "); | |
}); | |
return this; | |
} | |
})( jQuery ); |
This is awesome and does what I need.... I did notice that in Safari at least, for some reason extra spaces were being appended in the string as the class changed. I changed line 18 to:
it.className = $.trim(classes.join(" "));
And that seems to have resolved the issue.
I am almost sure, that problem with IE occured because of "each" function, earlier versions of IE doesn't support it. The workaround is to use normalized jQuery
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi Sarink, i think you are right...but some how i found different code which is little bit lengthy but working fine in all the versions of IE and chrome...... Below code i am using,have a look:-
$.fn.removeClassPrefix = (function(oldRemoveClass){
return function(){
// Turn arguments into a true array
var args = Array.prototype.slice.call(arguments);
var class_list = args[0];
var classes = class_list.split(' ');
var new_class_list = [];
var get_rid = [];
var $t = $(this);
for(var i = 0, clen = classes.length; i < clen; i++){
if(classes[i].indexOf('') !== -1){
var c_stripped = classes[i].replace('_', '');
$t.filter('[class*="' + c_stripped + '"]').each(function(){
var cl = this.className.split(' ');
for(var j = 0, jlen = cl.length; j < jlen; j++){
if(cl[j].indexOf(c_stripped) !== -1){
get_rid.push(cl[j]);
}
};
});
}
else {
new_class_list.push(classes[i]);
}
}
args[0] = $.merge(new_class_list, get_rid).join(' ');
return _oldRemoveClass.apply(this, args);
};
})($.fn.removeClass);