如何优化jquery脚本(表创建N行X 56列)
How to optimize jquery script (table creation N rows X 56 cols)
嗨,我有一个jquery脚本,它采用表模板并添加N行(N=[1…100])作为第一个TR的克隆。然后,每行中的每个单元格都填充一些数据(并非所有单元格都始终填充),每个单元格都附加了"on clik"事件,在单元格悬停行、单元格、coll上突出显示。
我面临的问题是生成(时间)和可用性的优化(鼠标移动不平滑)
代码:
HTML模板表:
<table id='schedulerview' class='myGrid'>
<colgroup id='col_0'></colgroup>
<colgroup id='col_1'></colgroup>
<colgroup id='col_2'></colgroup>
<colgroup id='col_3'></colgroup>
....
<colgroup id='col_55'></colgroup>
<thead>
<tr>
<th>0</th>
<th>1</th>
<th>2</th>
<th>3</th>
....
<th>51</th>
</tr>
</thead>
<tbody>
<tr id='template' style='display:none'>
<td id='0' HID='W0_Y_I' class='scheddata'>Week 1</td>
.....
<td id='51' HID='W55_Y_I' class='scheddata'>Week 52</td>
</tr>
</tbody>
</table>
CSS:
.litrow { background-color: #eee; }
.litcell { background-color: yellow; }
文件codeehind.js
$(document).ready(function () {
//turn on row, cell, column highlight on hover
$("table#schedulerview tbody").on('mouseenter', 'tr', function () {
$(this).addClass('litrow');
});
$("table#schedulerview tbody").on('mouseleave', 'tr', function () {
$(this).removeClass('litrow');
});
$("table#schedulerview tbody").on('mouseenter', 'td', function () {
$(this).addClass('litcell');
$("colgroup").eq($(this).index()).addClass("litrow");
});
$("table#schedulerview tbody").on('mouseleave', 'td', function () {
$(this).removeClass('litcell');
$("colgroup").eq($(this).index()).removeClass("litrow");
});
//function for getting data and create schedule table from template table
getSchedule();
});
getschedule函数:
function getSchedule() {
var data = "{userid:'" + userid + "',year:" + year + "}";
$.ajax({
type: "POST",
url: "/Scheduler.aspx/getSchedule",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (ret) {
var areas = JSON.parse(ret.d.Areas);
var schedule = JSON.parse(ret.d.Schedule);
//remove all rows from table that are not template
$('table#schedulerview tr.eventSchedule').remove();
//create row for each element from DB - prepare matrix elementsXWeeks
var $tr = $('#template');
$.each(areas, function (i, x) {
var $clone = $tr.clone();
$clone.css('display', 'block');
$clone.attr('id', 'new_row_' + i);
$clone.addClass('eventSchedule');
$clone.children('td:first').text(x.AreaName);
//for each cell in new row
$clone.children('td.scheddata').each(function () {
var $this = $(this);
var HID = $this.attr("HID").replace('_Y_', '_' + year + '_').replace('_I', '_' + x.IDObszaru);
$this.attr("HID", HID);
});
$tr.before($clone);
});
//fill in the matrix with scheduled data
$.each(schedule, function (i, x) {
$td = $("table#schedulerview td[HID='" + x.HID + "']");
$td.addClass(x.Status);
$td.attr("WeekNum", x.WeekNum);
$td.attr("PlanID", x.Id);
$td.parent().addClass('plannedrow');
});
},
error: function (ret) {
alert(ret.responseText);
}
});
}
getSchedule()函数持续几秒钟,是否可以对其进行优化,使其更快?
更改:
我尝试了不同的行创建方法:
for (i = 0; i < areas.length; i++) {
$lasttr = $("table#schedulerview tbody").append("<tr id='new_row_" + i + "' class='eventSchedule' ></tr>");
$lasttr = $("table#schedulerview tbody tr#new_row_" + i);
for (j = 0; j < 56; j++) {
var sclass = "";
if (j == 0)
$lasttr.append("<td>" + areas[i].AreaName + "</td>");
if (j == 1)
$lasttr.append("<td>" + areas[i].AreaSubName + "</td>");
if (j == 2)
$lasttr.append("<td>" + areas[i].AreaParentName + "</td>");
if (j > 2) {
sclass = "'scheddata'";
k = j - 2;
$lasttr.append("<td class=" + sclass + " HID='W" + k + "_" + year + "_" + areas[i].AreaID + "'></td>");
}
}
}
但速度还不够快,悬停的问题依然存在。(同样在使用css时:悬停伪类。
你能做这样的事情吗?
$(function () {
for (i = 0; i < 56; i++)
$("thead tr").append("<th>" + (i+1) +"</th>");
for (i = 0; i < 20; i++){
$("tbody").append("<tr />");
for (j = 0; j < 56; j++)
$("tbody tr:last-child").append("<td>" + ((i+1) + ": " + (j+1)) +"</td>");
}
});
table tr:hover td {background: #99f;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table>
<thead><tr></tr></thead>
<tbody></tbody>
</table>
相关文章:
- 在经过DATE验证的列中创建null值
- 如何创建一个具有固定左右列和水平滚动的表
- 如何使用jQuery和乘法行和列创建HTML表
- 如何在 jquery 中创建可编辑的表列
- 我创建了一个下拉列表,以及如何显示所选项目的其他列数据
- 创建一个复选框按钮的散列,这些按钮在单击时在Twitter Bootstrap Button组中处于活动状态
- jqGrid有条件地创建一列
- 如何创建一个每行列数未知的html表,对齐列,并为每个单元格/行指定一个id
- 如何在 JavaScript 中动态创建的行中获得 2 列的差异
- 如何为下面的代码而不是行创建一组新的列
- 手控表未加载动态创建的列标题
- 重新创建 3 列 facebook 风格的部分滚动,然后固定位置 CSS
- 如何创建一个表并为每行动态创建2列
- 如何在angular js中创建多列组合框
- 创建UL列以列出所选和上传文件中的文件
- 如何通过JavaScript从数组创建散列
- 用javascript从一个数组中创建3列的表
- 如何在不使用固定大小的情况下创建两列(一列有两行,另一列有一行)
- 如何优化jquery脚本(表创建N行X 56列)
- 如何在Materialize CSS中创建多列下拉菜单?