我正在编写一个 jQuery 可用性日历,它基本上显示一个巨大的表格。有多大?过去两年、今年和未来两年的每一天都有 34 行和 1 列。我会为您计算:超过 62,000 个表格单元格。
是的,这加载有点慢,但是一旦加载,日历就完全符合我们的需要。只有一个问题:
用户需要能够选择一个单元格块。我在 UI 中设置了所有内容,以允许用户围绕一组单元格绘制一个框,选择框中的所有单元格。实际上将它们标记为“选中”的过程非常缓慢。这是我使用的循环代码:
while(r<=thisRow) {
for(var c=startColumn;c<=thisColumn;c++) {
if($(".calendar_slot[row="+r+"][column="+c+"]").attr('selectable')=='YES') {
if (toggleDirection==0) { $(".calendar_slot[row="+r+"][column="+c+"]").removeClass('selected'); $(".calendar_slot[row="+r+"][column="+c+"]").html(''); }
if (toggleDirection==1) { $(".calendar_slot[row="+r+"][column="+c+"]").addClass('selected'); $(".calendar_slot[row="+r+"][column="+c+"]").html($(".calendar_slot[row="+r+"][column="+c+"]").attr('label')); }
}
}
r++;
}
如您所见,我必须按列和行自定义属性的值进行选择。我无法将这些嵌入到单元格的 ID 中,因为已经有另一个进程对速度有同样的需求,并且已经使用了 ID 值。如果 ID 值包含行和列信息,则此其他功能会中断,然后需要使用自定义属性,因此会遇到与我在这里遇到的相同问题。
有没有办法加快这个选择过程?循环本身并不需要很长时间(如果我注释掉 jQuery 的东西,它运行得非常快)。所以我需要一种方法来强制 jQuery 根据自定义属性的值更快地执行这些任务。
有任何想法吗?