2013-07-10 18 views
2

與treetable中插件的所有後代一塊我的HTML代碼如下所示:我如何影響/選擇使用jQuery/JavaScript的

<tr data-tt-id="1"> 
    <td>Parent</td> 
</tr> 
<tr data-tt-id="2" data-tt-parent-id="1"> 
    <td>Child 1</td> 
</tr> 
<tr data-tt-id="4" data-tt-parent-id="2"> 
    <td>Child 1's child</td> 
</tr> 
<tr data-tt-id="3" data-tt-parent-id="1"> 
    <td>Child 2</td> 
</tr> 
<tr data-tt-id="5" data-tt-parent-id="3"> 
    <td>Child 2's child</td> 
</tr> 

我選擇具有數據-TT-ID父=」 1「使用這個:

$('tr[data-tt-parent-id="1"]'); 

但我希望所有的孩子和孩子的孩子太多,不管樹有多深。

正如你所看到的,data-tt-id是孩子的唯一ID,而data-tt-parent-id是孩子附加到的ID。

我正在考慮循環其中每一個,但我不知道如何實現這一點。 如何爲data-tt-id設置爲「1」的tr選擇所有後代?

+0

with'.each()'? –

+1

@ Karl-AndréGagnon它比這更復雜,他需要一個遞歸解決方案。 – Barmar

+0

好吧,他想要他的孩子的孩子? –

回答

4
function getDescendants(el, curset) { 
    curset = curset || $(""); // default to empty set 
    var id = el.data('tt-id'); 
    var children = $("tr[data-tt-parent-id="+id+"]"); 
    if (children.length) { 
     curset = curset.add(children); 
     children.each(function() { 
      curset = curset.add(getDescendants($(this), curset)); 
     }); 
    } 
    return curset; 
} 

有可能是更地道的方式來寫,而無需在多個地方重新分配curset = ...,但這個工程。

DEMO

+0

我無法得到它與此.. – karlingen

+0

我拼錯的數據屬性,我剛剛糾正它。那樣有用嗎? – Barmar

+0

修復了其他問題,我認爲它現在可行。 – Barmar

相關問題