我有一個插件可以克隆一個輸入,可能有或沒有綁定jQuery驗證引擎。如何從元素中刪除所有jQuery驗證引擎類?
所以,它的類可能包含例如validate[required,custom[number],min[0.00],max[99999.99]]
或jQuery驗證引擎驗證器的任意組合。
唯一可以肯定的是,該類以validate[
開頭並以]
結尾,但爲了使其更復雜,可以使用嵌套集[]
。
所以,我的問題是,如何使用jQuery刪除這些類(不知道完整的類)?
我有一個插件可以克隆一個輸入,可能有或沒有綁定jQuery驗證引擎。如何從元素中刪除所有jQuery驗證引擎類?
所以,它的類可能包含例如validate[required,custom[number],min[0.00],max[99999.99]]
或jQuery驗證引擎驗證器的任意組合。
唯一可以肯定的是,該類以validate[
開頭並以]
結尾,但爲了使其更復雜,可以使用嵌套集[]
。
所以,我的問題是,如何使用jQuery刪除這些類(不知道完整的類)?
如果沒有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.00],最大[99999.99]]'和類似的變化是有效的! – Hailwood 2013-02-28 11:17:30
這是我的實現,它不使用正則表達式,但是,誰說它也有?
//'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);
我覺得這個解決方案更簡單。您只需將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])
}
});
請閱讀我對尼普拉答案的評論 – Hailwood 2013-03-07 10:47:11
正則表達式可能是你最好的選擇,jQuery的可以刪除和添加類,如果你已經知道這個名字,但除非你想有一個removeClass()調用每一個可能的組合,你會更好做一個正則表達式和使用純JS查找並刪除類 – jammypeach 2013-02-28 10:47:14
可能的重複[驗證隱藏的輸入和附加錯誤的其他元素與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
@Sparky這個問題不是這個問題的重複,是的,他們都是關於驗證引擎的,但是這個問題更通用,針對我們如何去除當我們不知道完整的類時,來自元素的類。 – Hailwood 2013-02-28 20:56:30