我已经获得了几个数千行的自动生成的HTML文档,我需要清理源代码。大多数情况下需要删除类似“table-col - ##”的类名。这是一个两步问题:
所以归结为:如果可能的话,我需要一种方法在$()选择器中使用regexp,然后在每个()中获取所选的类 - 或者将regexp应用于$ .removeClass()。有人能指出我正确的方向吗?
UPDATE :是否有任何$ .removeClass([selected])功能?这似乎是解决第二部分的最简单方法。
答案 0 :(得分:19)
如果只有数字可以接受,但也可能有其他字符,我会从这样的事情开始(未经测试,但在评论的帮助下编辑):
$("[class^='table-col-']").removeClass( function() { /* Matches even table-col-row */
var toReturn = '',
classes = this.className.split(' ');
for(var i = 0; i < classes.length; i++ ) {
if( /table-col-\d{1,3}/.test( classes[i] ) ) { /* Filters */
toReturn += classes[i] +' ';
}
}
return toReturn ; /* Returns all classes to be removed */
});
答案 1 :(得分:4)
您可以在不需要将类名拆分为数组的情况下执行此操作。让正则表达式完成所有工作。
对于找到的每个元素,删除与正则表达式匹配的所有类。
$("[class^='table-col-']").removeClass( function() {
return (this.className.match(/\b(table-col-\d{1,3})\b/g) || []).join(' ');
})
答案 2 :(得分:1)
<强> http://jsfiddle.net/adiioo7/AmK4a/1/ 强>
JS: -
$(function () {
$("div").filter(function() {
return this.className.match(/table-col-\d{0,3}/);
}).each(function(){
var classToRemove=this.className.match(/table-col-\d{0,2}/)[0];
$(this).removeClass(classToRemove);
});
});
示例HTML: -
<div class="table-col-0 temp">Test0</div>
<div class="table-col-99">Test99</div>
<div class="table-col-999">Test999</div>
输出HTML: -
<div class="temp">Test0</div>
<div class="">Test99</div>
<div class="table-col-999">Test999</div>
答案 3 :(得分:1)
试试这个:
$.fn.removeClassRegExp = function (regexp) {
if(regexp && (typeof regexp==='string' || typeof regexp==='object')) {
regexp = typeof regexp === 'string' ? regexp = new RegExp(regexp) : regexp;
$(this).each(function () {
$(this).removeClass(function(i,c) {
var classes = [];
$.each(c.split(' '), function(i,c) {
if(regexp.test(c)) { classes.push(c); }
});
return classes.join(' ');
});
});
}
return this;
};
答案 4 :(得分:0)
尝试
var className = 'table-col-';
$('[class^='+className+']').removeClass(function(index, class) {
return class.indexOf(className) == 0;
});
请参阅http://api.jquery.com/removeClass/和http://api.jquery.com/attribute-starts-with-selector/
<强>编辑:强>
var className = 'table-col-';
$('[class^='+className+']').removeClass(function(index, c) {
var elem = $(this);
$(c.split(' ')).each(function() {
var c = this.trim();
if(this.indexOf(className)==0) {
elem.removeClass(c);
}
});
});
答案 5 :(得分:0)
这个问题现在已经过时了,但是如果有其他人遇到它......
我创建了一个简单的插件jquery.classMatch,它提供了
$(selector).hasClassMatch(regexp)
$(selector).removeClassMatch(regexp)