删除以特定string开头的所有类
我有一个id="a"
的div,可能有几个类别附加的类别。 每个组都有一个特定的前缀。 在JavaScript中,我不知道该组中的哪一个类是在div上。 我希望能够清除给定前缀的所有类,然后添加一个新的。 如果我想删除所有以“bg”开头的类,我该怎么做? 像这样的东西,但实际上工作:
$("#a").removeClass("bg*");
使用jQuery,实际的DOM元素是在索引零,这应该工作
$('#a')[0].className = $('#a')[0].className.replace(/\bbg.*?\b/g, '');
正则expression式在字边界\b
分裂并不是最好的解决scheme:
var prefix = "prefix"; var classes = el.className.split(" ").filter(function(c) { return c.lastIndexOf(prefix, 0) !== 0; }); el.className = classes.join(" ").trim();
或者作为一个jQuery混搭:
$.fn.removeClassPrefix = function(prefix) { this.each(function(i, el) { var classes = el.className.split(" ").filter(function(c) { return c.lastIndexOf(prefix, 0) !== 0; }); el.className = $.trim(classes.join(" ")); }); return this; };
我写了一个简单的jQuery插件,alterClass,去除了通配符类。 还可以select添加类: https : //gist.github.com/1517285
$( '#foo' ).alterClass( 'foo-* bar-*', 'foobar' )
你不需要任何jQuery特定的代码来处理这个。 只需使用RegExp即可replace它们:
$("#a").className = $("#a").className.replace(/\bbg.*?\b/g, '');
你可以修改这个以支持任何前缀,但是更快的方法在上面,因为RegExp只被编译一次:
function removeClassByPrefix(el, prefix) { var regx = new RegExp('\\b' + prefix + '.*?\\b', 'g'); el.className = el.className.replace(regx, ''); return el; }
使用$.fn.removeClass
第二个签名 :
// Considering: var $el = $('<div class=" foo-1 ab foo-2 c foo"/>'); function makeRemoveClassHandler(regex) { return function (index, classes) { return classes.split(/\s+/).filter(function (el) {return regex.test(el);}).join(' '); } } $el.removeClass(makeRemoveClassHandler(/^foo-/)); //> [<div class="abc foo"></div>]
http://www.mail-archive.com/jquery-en@googlegroups.com/msg03998.html说:;
…和.removeClass()将删除所有类…
这个对我有用 ;)
干杯
我正在寻找解决scheme完全相同的问题。 删除所有以“fontid_”开头的类在阅读本文之后,我写了一个我现在使用的小插件。
(function ($) { $.fn.removePrefixedClasses = function (prefix) { var classNames = $(this).attr('class').split(' '), className, newClassNames = [], i; //loop class names for(i = 0; i < classNames.length; i++) { className = classNames[i]; // if prefix not found at the beggining of class name if(className.indexOf(prefix) !== 0) { newClassNames.push(className); continue; } } // write new list excluding filtered classNames $(this).attr('class', newClassNames.join(' ')); }; }(fQuery));
用法:
$('#elementId').removePrefixedClasses('prefix-of-classes_');
我将使用简单的jQuery构造函数和数组处理函数的一种方法是声明一个函数,该函数采用类的控件和前缀的id,并删除所有分类。 代码如下:
function removeclasses(controlIndex,classPrefix){ var classes = $("#"+controlIndex).attr("class").split(" "); $.each(classes,function(index) { if(classes[index].indexOf(classPrefix)==0) { $("#"+controlIndex).removeClass(classes[index]); } }); }
现在,这个function可以从任何地方调用,button或从代码:
removeclasses("a","bg");
我知道这是一个古老的问题,但我find了新的解决scheme,并想知道它是否有缺点?
$('#a')[0].className = $('#a')[0].className .replace(/(^|\s)bg.*?(\s|$)/g, ' ') .replace(/\s\s+/g, ' ') .replace(/(^\s|\s$)/g, '');
Prestaul的回答很有帮助,但对我来说并不合适。 jQuery按idselect对象的方式不起作用。 我不得不使用
document.getElementById("a").className
代替
$("#a").className
我也使用连字符'和数字作为类名。 所以我的版本包括'\ d-'
$('#a')[0].className = $('#a')[0].className.replace(/\bbg.\d-*?\b/g, '');
(function($) { return this.each(function() { var classes = $(this).attr('class'); if(!classes || !regex) return false; var classArray = []; classes = classes.split(' '); for(var i=0, len=classes.length; i<len; i++) if(!classes[i].match(regex)) classArray.push(classes[i]); $(this).attr('class', classArray.join(' ')); }); })(jQuery);
在一行中删除所有匹配正则expression式someRegExp的类
$('#my_element_id').removeClass( function() { return (this.className.match(/someRegExp/g) || []).join(' ').replace(prog.status.toLowerCase(),'');});
$("#element").removeAttr("class").addClass("yourClass");
- CSS3的border-radius属性和border-collapse:collapse不要混合。 我怎样才能使用边界半径来创build一个圆angular的折叠表?
- Bootstrap:使用右拉,左拉/ 3列更改div顺序
- 是不是很愚蠢,一个小的图标需要另一个HTTP请求? 如何使favicon进入精灵?
- Chrome Dev Tools显示灰色的计算属性意味着什么?
- CSS最后一个孩子(-1)
- 应该将CSS属性列表样式应用于<ul> / <ol>还是<li>?
- 如何使多个div显示在一行,但仍然保留宽度?
- 你可以devise一个html单选button,看起来像一个checkbox?
- 如何更改DIV填充而不影响宽度/高度?