2009-11-03 40 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