2012-09-06 139 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/

相關問題