2013-10-28 187 views
2

我有一張由多行組成的表格。每行都有id,data-parent屬性和存儲在data()中的虛擬級別選項。頂級行不具有父級或級別屬性。我需要找到一個節點的最後一個孩子,像前:用jquery查找最後一個孩子

<tr id="83" class=""></tr> 
<tr id="91" class="successor" data-parent="83"></tr> 
<tr id="93" class="successor" data-parent="91"></tr> 
<tr id="92" class="successor" data-parent="91"></tr> 
<tr id="94" class="successor" data-parent="92"></tr> 
<tr id="133" class="successor" data-parent="83"></tr> 
<tr id="134" class="successor rowselected" data-parent="83"></tr> 

這看起來像 enter image description here

我需要找到,如果行1.1.1.1是最後一個爲1.1。怎麼做? 試圖使用nextAll或prevAll選擇器,並通過數據父級和級別過濾...但沒有運氣。謝謝。

回答

1

苦苦掙扎的整整一天讓我想到了這個解決方案: 找到與dr博士同級的頂級節點混合行並檢查元素是否在拖動元素前最後一次。

function isLastChild(parent, target, dragged) 
{ 
    var top_node = target.prevUntil("tr[data-parent="+parent+"]").andSelf().prev().first(); 
    var child_nodes = top_node.nextUntil("#"+dragged.attr("id")).filter(function(){ return $(this).data("parent") == target.data("parent")}); 

return (child_nodes.last().attr("id")==target.attr("id")); 
} 
0

如果您確實有virtual level option,那麼您的示例代碼與您對virtual level option的描述相沖突,那麼這應該起作用。 如此處所示:http://jsfiddle.net/dBT3D/我已將TR更改爲DIV,因爲它在瀏覽器中造成問題,原因是HTML格式不正確。

HTML:

<div id="83" class=""> 
    <div id="91" class="successor" data-parent="83" data-level="1"> 
     <div id="93" class="successor" data-parent="91" data-level="2"></div> 
     <div id="92" class="successor" data-parent="91" data-level="2"> 
      <div id="94" class="successor" data-parent="92" data-level="3"></div> 
     </div> 
    </div> 
    <div id="133" class="successor" data-parent="83" data-level="1"></div> 
    <div id="134" class="successor rowselected" data-parent="83" data-level="1"></div> 
</div> 

JS:

$(document).ready(function() { 
    deepestEl = { 
     element: null, 
     level: 0 
    }; 
    $('.successor', '#83').each(function (index, el) { 
     console.log(el); 
     if ($(el).data('level') >= deepestEl.level) { 
      deepestEl.element = el; 
      deepestEl.level = $(el).data('level'); 
     } 
    }); 

    console.log(deepestEl); 
}); 

這將水平和元素返回deepestEl對象。在這個例子中,它將返回{element: div#94.successor, level: 3}

+0

這是真的,但正如我告訴行不嵌套在html中,所以選擇器$(「。後繼」,「#id_row」)給出空的結果集。 –

0

你有沒有試過如下:

var lastTr = $('#TABLEID tr').last(); 

這應該找到當前表的最後<TR>元素

欲瞭解更多信息的(與「TABLEID」標記) jQuery.last()看起來here

+0

所有行都在1個表中。嵌套是通過我寫的附加屬性的幫助來實現的。 –

+0

對不起,所以你需要找到鏈接到特定父項目的最後一個項目?即你需要找到'91'行的所有子元素,所以它會返回93和92.這個假設是否正確? – Nunners

+0

不完全是,ex的行1.1.1.1有id 94,1.1.1.1的父級是92,它的父級是91.所以我想知道行1.1.1.1是否是節點91的列表中的最後一個。 –