将可排序包含限制为 Table 中的特定行

Restricting Sortable Containment to Specific Rows in a Table

我有一个 table grouped-by 个不同的 'categories'。 table 将使用 jQuery Sortable 排序 table。但是,我想将 sortable 包含限制在每组 'group-by' 行内。我还想完全阻止 SINGLE 行排序。

所以...

样本 TABLE:

<table class="table-o-stuff">
    <thead>
        <tr><td>Category</td><td>Order</td><td>Value</td></tr>
    </thead>
    <tbody>
        <tr><td>Oranges</td><td>1</td><td>Are Good</td></tr>
        <tr><td>Oranges</td><td>1</td><td>Are Okay</td></tr>
        <tr><td>Oranges</td><td>1</td><td>Are Bad</td></tr>
        <tr><td colspan="3">&nbsp;</td></tr>
        <tr><td>Apples</td><td>1</td><td>Are Good</td></tr>
        <tr><td colspan="3">&nbsp;</td></tr>
        <tr><td>Peaches</td><td>1</td><td>Are Okay</td></tr>
        <tr><td>Peaches</td><td>1</td><td>Are Bad</td></tr>
        <tr><td>Peaches</td><td>1</td><td>Are Good</td></tr>
    </tbody>
</table>

这绝对失败了:
我猜失败的原因是因为它在每个 TableRow 上创建了一个对象。

var $rows = $("td").filter(function () {
                return $(this).text().trim() === "Oranges";
            }).closest("tr");

$rows.sortable({
    helper: function (e, tr) {},
    stop: function(event, ui) {}
});

您可以将您的部分分组到不同的 tbody 并在 tbody 上调用可排序。像这样:

<table class="table-o-stuff">
    <thead>
        <tr><td>Category</td><td>Order</td><td>Value</td></tr>
    </thead>
    <tbody >
        <tr><td>Oranges</td><td>1</td><td>Are Good</td></tr>
        <tr><td>Oranges</td><td>1</td><td>Are Okay</td></tr>
        <tr><td>Oranges</td><td>1</td><td>Are Bad</td></tr>
    </tbody>
        <tr><td colspan="3">&nbsp;</td></tr>
        <tr><td>Apples</td><td>1</td><td>Are Good</td></tr>
        <tr><td colspan="3">&nbsp;</td></tr>
    <tbody >
        <tr><td>Peaches</td><td>1</td><td>Are Okay</td></tr>
        <tr><td>Peaches</td><td>1</td><td>Are Bad</td></tr>
        <tr><td>Peaches</td><td>1</td><td>Are Good</td></tr>
    </tbody>
</table>

$('tbody').sortable({
    containment: 'parent',
    items: 'tr'
})