2011-10-28 43 views
3

我正在使用jQuery來遍歷文檔中的某些元素。這些元素的類型爲<tr>,類別爲.input-row。某些元素也可以有一個輔助類(例如.input-area)。jQuery:獲得「二級」類

我使用$(".input-row").each()循環遍歷元素,但是如何確定$(this)元素是否具有「輔助」類,如果是,請獲取此名稱?

+0

使用分割。請參閱:http://stackoverflow.com/questions/4239947/jquery-get-second-class-name –

+0

如果您需要*檢查*元素的類,你可能會做錯什麼。現在'class'不再是用來存儲數據的 - 它有'data-whatever'(通過jQuery'.data('whatever')')。如果你已經需要這個類來應用格式化,那麼使用'hasClass()'檢查是絕對正確的。 – ThiefMaster

回答

4
$(".input-row").each(function(){ 
    $.each($(this).attr('class').split(/\s+/), function(i, v){ 
    if(v !== 'input-row'){ 
     alert(v); 
    } 
    }); 
}); 
+2

問題問「如何確定$(this)-element是否具有」次要「類,如果是,請獲取這個」...「的名稱你的例子意味着你已經知道類的名字 –

+0

我編輯了代碼,我認爲它會做你想要的。 – michaeljdennis

1

可以使用attr得到所有類的列表,你可以簡單地擺脫類的你來選擇的元素:

$(".input-row").each(function() { 
    var allClasses = $(this).attr("class"), 
     otherClasses = allClasses.replace("input-row", ""); 
}); 

如果元素有兩個以上的班,那麼你將留下其他類的列表。要將它們分開,您可以在空格中使用split

+1

'$(this).attr(「class」)'相當於'this.className'。 – Tomalak

1

您可以獲取元素上的所有類,然後刪除您知道存在的類('input-row'),然後您將在該元素上留下任何其他類。

$('.input-row').each(function() { 
    var classes = $.trim($(this).attr('class').replace('input-row', '')); 
    if (classes.length > 1) { 
     alert(classes) // Names of all of the remaining classes 
    } 
} 

如果您想單獨獲取它們,可以使用classes.split('')來獲取數組。

0

我更喜歡聲明式的方法。你知道哪些類可以有,所以對他們寫的情況:

$(".input-row").each(function() { 
    var myClasses = this.className.split(" "); 
    $.each(myClasses, function (i, className) { 
    if (className != 'input-row') { 
     alert(className); 
    } 
    }); 
}); 

$(".input-row.input-area").each(/* ... */); 
$(".input-row.input-field").each(/* ... */); 

如果您由於某種原因不知道類的名字,你可以沿着線提取它

0

你也可以做這樣的事情來檢測類的數量:

var nc = $('#myId').attr('class').split(' ').length; 

那麼如果nc大於1:

$('#myID').attr('class').split(' ')[1] 

應該返回 '次要' 類

a fiddle

+0

如果該元素沒有第二類,該怎麼辦? –

+0

這就是爲什麼我會事先檢查課程的數量,但你說得對:也許這需要一點澄清。 – m90

0

我會去這個

var otherClasses = $('.input-row').attr('class').split(' '); 
otherClasses.splice($.inArray("input-row", otherClasses),1); 

簡單地做這

var otherClasses = $('.input-row').attr('class').replace('input-row', '').split(' '); 

由於「輸入行」後面的空格,會給你一個額外的字符串,其中有一個空的值。