2011-08-21 55 views
4

如何计算jquery中具有相同类的元素动态生成元素? 我发现了一个类似的问题,但不幸的是它没有工作。 jQuery counting elements by class; what is the best way to implement this?计算jquery中具有相同类的元素数

我做了这样的事情,我从答案基于:

$('.capital_class').live('blur', function(){ 

alert($(this).length); 
}); 

是动态生成的一类capital_class的元素。但是每当我模糊时,我总是得到1的长度。我如何正确得到这个?

+0

尝试在alert中使用'.capital_class'而不是'this'。 – Puzo

回答

19

更改警惕这一点:

alert($('.capital_class').length); 

记住该事件被称为一个单独的元素,从而this只是一个单一的元素 - 你必须有jQuery的查询DOM事件发生后。 (第一个查询只是设置了实时处理来创建事件处理程序。)

+2

+1因为麻烦加入解释。 –

4

使用此:

$('.capital_class').live('blur', function(){ 

alert($('.capital_class').length); 
}); 

this在功能指的是活动对象,当你这样做$(this).length,是因为该元素没有任何重复返回1。

1

这可能不是您在这种情况下需要的,但为了使它更具动态性,以防万一您有多个类,并且希望确保所有类匹配,你可以这样做:

$('.capital_class').live('blur', function(){ 

    var classes_selector = '.' + $.trim(this.className).replace(/\s+/g,'.'); 
    alert($(classes_selector).length); 

}); 

你基本上有一个.字符替换一个或多个连续的空格的所有实例className财产。这是因为class-selector[docs]能够根据匹配提供的所有类别进行选择。

它也使用jQuery.trim()[docs]方法来摆脱任何前导/尾随空间。

现在,如果向收到事件的元素添加和删除附加类,它将始终仅匹配具有所有相同类的元素。


相反,如果你想匹配的有任何一个原始元素确实类的所有元素,那么这样做:

$('.capital_class').live('blur', function(){ 

    var classes_selector = '.' + $.trim(this.className).replace(/\s+/g,',.'); 
    alert($(classes_selector).length); 

}); 

这只是增加了一个逗号选择器分开课程,创建一个multiple-selector[docs]

相关问题