【问题标题】:How to remove all jQuery validation engine classes from element?如何从元素中删除所有 jQuery 验证引擎类?
【发布时间】:2013-02-28 10:44:57
【问题描述】:

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

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

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

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

【问题讨论】:

  • 正则表达式可能是您最好的选择,如果您已经知道名称,jQuery 可以删除和添加类,但除非您想为每个可能的组合调用 removeClass(),否则最好执行正则表达式并使用纯 JS 查找和删除类
  • @Sparky 这个问题不是那个问题的重复,是的,它们都是关于验证引擎的,但是这个问题更通用,旨在解决当我们不这样做时如何从元素中删除类'不知道全班。

标签: javascript jquery css jquery-validation-engine


【解决方案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);

【讨论】:

    【解决方案2】:

    如果没有 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
    

    【讨论】:

    • 关闭,但没有雪茄,因为validate[ required, custom[number], min[0.00], max[99999.99] ] 和类似的变体是有效的!
    【解决方案3】:

    我认为这个解决方案更加简单。您只需将field_id 替换为该元素的id,如果该元素具有some_class different_class 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])
    }
     });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多