2012-09-06 141 views
2

我想知道某个类中有多少元素出现在DOM中,然后让我们说一个元素被点击。如何获取特定元素之前的类的元素数

<html> 
    <div class="a"> 
    </div> 
    <div class="b"> 
     <div class="a"> 
     </div> 
    </div> 
    <button>CLick me!</button> 
    <div class="a"> 
    </div> 
</html> 

所以在前面的DOM树如果要点击的元素是按钮,和Im寻找与类的div“一”,它应该返回2,即使在整个树有3个,而是“之前“按钮只有2.

我该怎么做?

由于

[编辑] 元件的搜索在DOM树的开头开始直到点击的元素。不要假定结构,元素是单击元素的同位词,它可以具有任何类型的结构。

+0

你觉得这个怎么样?太费时间了?它解决了这个问题... __ $(this).parents()。prevAll()。find('。a')。length__ 正在$(this)被点击的按钮。 – subharb

回答

2

得到所有前面的节点匹配.a,然后得到以前所有节点的后代匹配.a和相加:

var count = $('button').prevAll('.a').length; 
count += $('button').prevAll().find('.a').length; 
console.log(count); 
+0

我将编辑我的问题,以便了解我真正需要的内容。 无论如何,谢谢 – subharb

0

试试这个,让该类别相匹配的所有分组内容,那么这些分组元素的所有儿童与班级相匹配。

$("button").click(function() { 
    var prev = $(this).prevAll(this.className); 
    console.log(prev.length + prev.find(this.className).length); 
}); 

虽然未经过测试。

0

您可以过滤.not()

$('button').click(function(){ 
    var $this = $(this); 
    console.log(
      $('.a') 
        // get all with class=a not including all after..descendants after 
        .not($this.nextAll('.a'), $('.a',$this.nextAll('*'))) 
        // get number of elements returned 
        .length 
    ); 

});​ 

http://jsfiddle.net/Gz9v2/

相关问题