jQuery可以使用延迟呈现进行排序

时间:2015-07-23 10:03:43

标签: jquery dom deferred-rendering

我使用了一个jQuery插件(带有Scroller扩展名的DataTable),它允许我通过延迟渲染显示数千行的HTML table

我想将其设为sortable(使用可排序的jQuery-UI插件)。

问题在于,当我拖动一个元素并希望将其放到较低的位置时,该表的第一个nodes将从DOM中消失,并且会出现新的元素。所以我不再能够放弃被拖动的元素。

一个例子比长文本更好:http://jsfiddle.net/91dr6utg/

$(document).ready(function() {
    $('#example').DataTable( {
        data:           data,
        deferRender:    true,
        dom:            "frtiS",
        scrollY:        200,
        scrollCollapse: true
    } );
    
    $('#example tbody').sortable({
        helper: "clone",
        start: function (event, ui) {
            ui.item.appendTo($('#dragSave'));
            ui.helper.appendTo($('#dragSave'));
        },
    }).disableSelection();
});

var data = [ "A lot of datas !" ];
<table id="example" class="display" cellspacing="0" width="100%">
    <thead>
        <tr>
            <th>ID</th>
            <th>First name</th>
            <th>Last name</th>
            <th>ZIP / Post code</th>
            <th>Country</th>
        </tr>
    </thead>
</table>

<div id="dragSave"></div>
(在jsfiddle.net中尝试,片段中允许的行太多)

如果我拖动第一个元素,我不能在第90个元素之后删除它。

更多信息:

我执行了start功能以防止拖动线消失。实际上,如果从DOM中删除原始node,则sortable插件不能再删除该元素(它不再知道它)。所以我将它移动到另一个永远不会更新的DOM容器中。

如果我们删除此功能,我们会看到原来的node被删除大约下五十行 =&GT;好吧,这来自DOM再生
但我们仍然可以放下元素,直到九十行下 =&GT;因为从未在DOM中生成的下一行是限制

1 个答案:

答案 0 :(得分:0)

我找到了一种不使用draggable()但使用UIActivityViewController

的方法

这是:http://jsfiddle.net/2dtcy9bs/1/