jquery-ui - 将 jQuery UI Sortable 应用于页面上的数百个元素会导致页面加载非常慢 - 需要如何提高效率的想法

标签 jquery-ui calendar jquery jquery-ui-sortable

我正在构建一个拖放日历,并发现 jQuery UI 的可排序功能为我想要做的事情提供了最佳的实时性能。

但是,将可排序应用于数月的时间(一次 60 到 180 天,有时更多)会导致页面加载明显滞后,因为我的脚本正在应用所有这些可排序实例。一旦加载就可以正常工作,但我不想有初始延迟。在某些情况下,浏览器甚至尝试终止脚本。

我尝试使日历的第一天可排序,然后使用 jQuery 的 .clone() 复制到所有其他日期,但不幸的是 jQuery 的 .clone() 似乎没有复制 .sortable 的事件。其他事件(例如单击、双击等)可以很好地复制,但不可排序。在网上做了一些研究,我所能找到的只是 jQuery“不支持插件克隆”的声明。

有更好的方法吗?我搜索了 stackoverflow、jQuery UI 论坛和 Google,但没有找到任何帮助。

提前致谢, 火腿

编辑:这是一些代码。没什么特别的。

    function sortableStop(event, ui) {
              // Saves to the DB here. Code removed - not relevant
    }

    $(".milestone-day").bind("dblclick", function(ev) {
      // Allows adding milestones. Code removed - not relevant
    }).sortable({
        handle: '.handle',
        connectWith: '.milestone-day',
        items: '.milestone',
        stop: sortableStop
    });

标记如下所示:

<table>
  <tbody>
    <tr>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
    </tr>
    <tr>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
      <td><ul class="milestone-day"></ul></td>
    </tr>
    ...
  </tbody>
</table>

里程碑是通过 ajax 加载到其正确的里程碑日 ul 中的 li 元素。

编辑 2:已发布工作演示:

http://www.clearsightstudio.com/demos/calendar-load/

编辑 3:演示已消失。抱歉。

请注意,打开页面时会出现延迟。与我的实际应用程序中的演示相比,发生的事情要多得多,因此滞后更加明显。

最佳答案

调用sortable()后调用connectWith,例如:

$('.whatever').sortable().sortable( "option", "connectWith", '.whatever' );

出于某种原因,它在我的场景(数千个元素)中提高了性能很多

关于jquery-ui - 将 jQuery UI Sortable 应用于页面上的数百个元素会导致页面加载非常慢 - 需要如何提高效率的想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873840/

相关文章:

javascript - 修改日历,以便在单击日期时打开注释

mysql - 在 sql 结果中填充空日期的最直接方法是什么(在 mysql 或 perl 端)?

javascript - 如何使用 Knockout 取消选择控件上的更改事件?

jquery - 从 Popover 中移除阴影

javascript - 在表格内包含一个可拖动的 div

javascript - 如何获取选定一周的所有天数?

jquery waypoints 高亮导航

jquery - 自动完成不允许空格

javascript - jQuery 交换元素内容给出类型 F 错误

jquery Tagsinput 和 ui 自动完成 : can they work with pre-loaded source?