我有一个插件,它正在克隆一个可能绑定或不绑定 jQuery 验证引擎的输入。
因此,它的类可能包含例如validate[required,custom[number],min[0.00],max[99999.99]]
jQuery 验证引擎验证器或任何组合。
唯一可以确定的是类以 开头validate[
和结尾]
,但为了使其更复杂,如上例所示,可以嵌套[]
.
所以,我的问题是,如何使用 jQuery 删除这些类(不知道完整的类)?
我有一个插件,它正在克隆一个可能绑定或不绑定 jQuery 验证引擎的输入。
因此,它的类可能包含例如validate[required,custom[number],min[0.00],max[99999.99]]
jQuery 验证引擎验证器或任何组合。
唯一可以确定的是类以 开头validate[
和结尾]
,但为了使其更复杂,如上例所示,可以嵌套[]
.
所以,我的问题是,如何使用 jQuery 删除这些类(不知道完整的类)?
这是我的实现,它不是使用正则表达式,而是呃,谁说它也有?
//'first validate[ required, custom[number], min[0.00], max[99999.99] ] other another';
var testString = $('#test')[0].className;
function removeValidateClasses(classNames) {
var startPosition = classNames.indexOf("validate["),
openCount = 0,
closeCount = 0,
endPosition = 0;
if (startPosition === -1) {
return;
}
var stringStart = classNames.substring(0, startPosition),
remainingString = classNames.substring(startPosition),
remainingSplit = remainingString.split('');
for (var i = 0; i < remainingString.length; i++) {
endPosition++;
if (remainingString[i] === '[') {
openCount++;
} else if (remainingString[i] === ']') {
closeCount++;
if (openCount === closeCount) {
break;
}
}
}
//concat the strings, without the validation part
//replace any multi-spaces with a single space
//trim any start and end spaces
return (stringStart + remainingString.substring(endPosition))
.replace(/\s\s+/g, ' ')
.replace(/^\s+|\s+$/g, '');
}
$('#test')[0].className = removeValidateClasses(testString);
如果没有 JQuery,这样做实际上可能更简单。使用 className 属性,您可以使用 split() 获取类列表,并检查该类是否包含“validate[”。
var classes = $('#test')[0].className.split(' ');
var newClasses = "";
for(var i = 0; i < classes.length; i++){
if(classes[i].indexOf('validate[') === -1){
newClasses += classes[i];
}
}
$('#test')[0].className = newClasses
我认为这个解决方案更加简单。您只需要替换field_id
该id
元素的 ,如果该元素具有类似some_class different_class validate[...]
的类,则只会使用 validate 删除该类,而将其他类留在后面。
var that ='#"+field_id+"';
var classes = $(that).attr('class').split(' ');
$.each(classes, function(index, thisClass){
if (thisClass.indexOf('validate') !== -1) {
$(that).removeClass(classes[index])
}
});