2

我有一个由行组成的表。每行都有 id、data-parent 属性和存储在 data() 中的虚拟级别选项。顶级行没有父级和级别属性。我需要找到节点的最后一个子节点,例如:

<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>

这看起来像 在此处输入图像描述

我需要确定第 1.1.1.1 行是否是 1.1 的最后一行。怎么做?尝试使用 nextAll 或 prevAll 选择器并按数据父级和级别过滤它......但没有运气。谢谢。

4

3 回答 3

1

一整天的挣扎使我找到了这个解决方案:找到与拖动行处于同一级别的行的顶部节点,并检查该元素是否在拖动元素之前最后一个。

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"));
}
于 2013-10-28T14:53:10.763 回答
0

您的示例代码与您对 a 的描述相冲突,virtual level option如果您确实有 a virtual level optionthen a this 应该可以工作。如此处所示: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}

于 2013-10-28T08:27:10.353 回答
0

您是否尝试过以下操作:

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

这应该找到<TR>当前表的最后一个元素(标有“TABLEID”)

更多信息jQuery.last()请看这里

于 2013-10-28T08:27:51.397 回答