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[...]検証でクラスのみが削除され、他のクラスは残されます。

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 に答える