我使用一个jQuery插件(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
函数来防止拖动的线消失。事实上,如果原来的node
从DOM中删除,sortable
插件不能再删除元素(它不再知道它了)。所以我把它移动到DOM的另一个容器中,这个容器永远不会更新。
如果我们删除这个函数,我们会看到原来的node
被删除了大约50行
这是DOM再生的结果
但是我们仍然可以将元素放到
下90行
=>因为下一行永远不会在DOM中生成,这是限制
我找到了一种不使用sortable()
,而是使用draggable()
的方法。
网址:http://jsfiddle.net/2dtcy9bs/1/