2009-11-03 43 views
2

我有像這樣一個未知數量的元素:查找元素的動態類名與jQuery

<div class="item item-1"></div> 
<div class="item item-2"></div> 
<div class="item item-3"></div> 

我想要做的,是檢查每個項目都有開始「本期特價貨品」類名。如果爲true,則提取該id。類似這樣的:

$("container").each(function 
    if ($(this).hasClassNameStartingWith("item-")) 
     console.debug(theId); 
); 

這怎麼可能?

在此先感謝!

回答

5

使用包含在類屬性選擇:

$('container[class*=" item-"]').each(function() { 
    var classID = null; 
    var classes = $(this).attr('class').split(' '); 
    for (var i = 0, len < classes.length; i < len; ++i) { 
     var class = classes[i]; 
     if (class.match(/^item-/)) { 
      classID = class.replace("item-",''); 
      break; 
     } 
    } 
    if (classID) { 
     ... do something ... 
    } 
}); 

注意引號的使用,包括空間,給你的樣品標記。如果「item-N」類可能出現在列表的開頭,並且您確定沒有任何類會偶然匹配該字符串,那麼也可以省略該空格。

更新示例顯示如何提取類名的標識符部分。

+0

是的!爲什麼我沒有想到這一點。但是,我將如何獲得ID? – Kordonme 2009-11-03 18:08:41

+0

$(this).attr('id') – David 2009-11-03 18:12:49

+0

David:「item-N」類中的id。 – Kordonme 2009-11-03 18:17:37

1

您可以在子元素class屬性進行正則表達式匹配:

var itemIDRe = /(?:^|[ \t\n\r\f\u200b]+)item-([^ \t\n\r\f\u200b]+)/; 

$('#container').children().each(function() { 
    var match = itemIDRe.exec($(this).attr('class')); 
    var itemID = match ? match[1] : null; 

    // Do something with itemID. 
}); 

正則表達式是基於HTML 4定義爲class attributewhite space