0

我有一个插件,它正在克隆一个可能绑定或不绑定 jQuery 验证引擎的输入。

因此,它的类可能包含例如validate[required,custom[number],min[0.00],max[99999.99]]jQuery 验证引擎验证器或任何组合。

唯一可以确定的是类以 开头validate[和结尾],但为了使其更复杂,如上例所示,可以嵌套[].

所以,我的问题是,如何使用 jQuery 删除这些类(不知道完整的类)?

4

3 回答 3

1

这是我的实现,它不是使用正则表达式,而是呃,谁说它也有?

//'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);
于 2013-02-28T11:56:58.250 回答
0

如果没有 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
于 2013-02-28T11:11:54.723 回答
0

我认为这个解决方案更加简单。您只需要替换field_idid元素的 ,如果该元素具有类似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])
}
 });
于 2013-03-07T06:39:46.953 回答