2013-02-28 47 views
0

我有一個插件可以克隆一個輸入,可能有或沒有綁定jQuery驗證引擎。如何從元素中刪除所有jQuery驗證引擎類?

所以,它的類可能包含例如validate[required,custom[number],min[0.00],max[99999.99]]或jQuery驗證引擎驗證器的任意組合。

唯一可以肯定的是,該類以validate[開頭並以]結尾,但爲了使其更復雜,可以使用嵌套集[]

所以,我的問題是,如何使用jQuery刪除這些類(不知道完整的類)?

+0

正則表達式可能是你最好的選擇,jQuery的可以刪除和添加類,如果你已經知道這個名字,但除非你想有一個removeClass()調用每一個可能的組合,你會更好做一個正則表達式和使用純JS查找並刪除類 – jammypeach 2013-02-28 10:47:14

+0

可能的重複[驗證隱藏的輸入和附加錯誤的其他元素與jQuery的驗證引擎](http://stackoverflow.com/questions/15132955/validating-hidden-input-and-appending -Error-to-other-element-with-jquery-validat) – Sparky 2013-02-28 17:05:24

+0

@Sparky這個問題不是這個問題的重複,是的,他們都是關於驗證引擎的,但是這個問題更通用,針對我們如何去除當我們不知道完整的類時,來自元素的類。 – Hailwood 2013-02-28 20:56:30

回答

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 
+0

關閉,但沒有雪茄,因爲'驗證[必需的,自定義[編號],最小[0.00],最大[99999.99]]'和類似的變化是有效的! – Hailwood 2013-02-28 11:17:30

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); 
0

我覺得這個解決方案更簡單。您只需將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]) 
} 
}); 
+0

請閱讀我對尼普拉答案的評論 – Hailwood 2013-03-07 10:47:11