2012-07-10 81 views
1

我有一個小問題,我需要計算元素的嵌套級別。 問題是,父元素可以容納多個子元素,子元素可以擁有自己的子元素。如何從jquery中查找從子項到父項的元素數?

請看我要從哪裏開始計數(標有文字「我從這裏開始」)。

HTML:

<div class="main_set"> 
    <div class="child_set"> 
     <div class="child_set"> 
      <div class="child_set">I start here!</div> 
     </div> 
     <div class="child_set"></div> 
    </div> 
    <div class="child_set"> 
     <div class="child_set"></div>  
    </div> 
</div> 

我已經試過幾件事情讓數3
例如我的最後一次嘗試:

$(this).closest('.main_set').find('.child_set'); 

這一個顯然返回6壽計算所有child_sets。

如何計算child_set元素從開始位置到main_set考慮到只有嵌套。所以基本上在我的例子中如何計算3?

回答

5

您可以使用parents()this找到所有的父母(有特殊選擇);對於長度,你必須爲當前添加一個。

alert($(this).parents('.child_set').length + 1); 

另請參閱this example

+0

哇,謝謝我通常傾向於複雜的事情。這工作很好。接受時間後關閉用完。 – arma 2012-07-10 18:16:27

0

使用.children()代替.find()

here clearly said

的。兒童()方法不同於.find()在。兒童()只 行進的單一電平向下DOM樹而。 find()可以遍歷多個級別的 以選擇後代元素(孫輩, 等)。

1

如果要統計所有child_set從DIV它說I start here!開始,你可以這樣做:

$(this).parents('.child_set').length + 1 

這會給你31被添加,因爲你的div與文本I start here!也有child_set類。

文檔:

+0

感謝您的輸入,scessor是第一個,所以我接受他的回答。 – arma 2012-07-10 18:17:26

+0

@arma:當然沒問題,花了一些時間理解你的問題:) – Blaster 2012-07-10 18:21:37

1

你必須調用stopPropagation或者它會調用父類的事件,因爲它們具有相同的類child_set

$('.main_set').on('click', '.child_set', function(e) { 
     e.stopPropagation(); 
     console.log($(this).parents('.child_set').andSelf().length); 
    }); 

Working demo

看這個其他演示:Link
在這裏你可以看到,它可以用於任何股利。

相關問題