我们怎样才能append等到前一个append完成.我附加了大量数据,因此当前附加应检查前一个附加是否完整.我能够通过给予所有附加物独立的一些时间延迟来做到这一点.但实际上根据我的代码我可能有'n'个附加,所以我想动态地这样做.
我尝试使用for或while循环,但脚本已损坏,浏览器崩溃,因为下一个追加是在上一个追加完成之前开始的.
$('#printall1').click(function() {
$('#fourElementsonly').empty();
var cleartable = 0;
var maxlimit = 0;
var presentarraycount = 0;
$.post("/PortalUserReport/getjunkdata", null, function(response, status) {
var report = eval(response);
var totalRecordsCount = report.length; //6000
var totalRecordsCountfortheLoop = totalRecordsCount;
var arraycount = Math.ceil(totalRecordsCount / 1000);
var reports = new Array(arraycount); // reports[6]
for (var i = 0; i < arraycount; i++) {
$('#fourElementsonly').append('<table border = "1" id = "Portal_User_elements' + i + '" style = " border-collapse:collapse; width:800px; margin:0px; padding:0px; border-color:black"> </table>');
}
reports[presentarraycount] = "";
$.each(report, function(x) {
if (cleartable == 0) {
for (var i = 0; i < arraycount; i++) {
$('#Portal_User_elements' + i).empty();
}
cleartable++;
}
if (recordnumber <= totalRecordsCountfortheLoop) {
reports[presentarraycount] += "<tr style = \"height:20px; border: 1px Solid Black\"> <td style = \"width:50px; text-align:center \"> " + recordnumber + " </td> <td style = \"width:350px;\"> Name :" + report[x].FirstName + "</td> <td style = \"width:200px;\"> UserName :" + report[x].UserName + " </td> <td style = \"width:200px; \"> Company : " + report[x].Company + " </td> </tr>";
reports[presentarraycount] += "<tr style = \"height:20px; border: 1px Solid Black\"> <td > </td> <td> Registration Date : <label class = \"datepicker\"> " + report[x].ActiveDate + " </label> <td> User CN : " + report[x].UserCN + " </td> <td> Status: " + report[x].Status + " </td> </ td> </tr>";
reports[presentarraycount] += "<tr style = \"height:20px; border: 1px Solid Black\"> <td> </td> <td> User Privilege : " + report[x].Privileges + " </td> <td> </td> </tr>";
maxlimit++;
if (maxlimit == 1000) {
presentarraycount++;
reports[presentarraycount] = "";
maxlimit = 0;
}
}
recordnumber++;
});
for (var i = 0; i < arraycount; i++) {
$(this).delay(1000, function() {
$('#Portal_User_elements' + i).append(reports[i]);
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
根据蒂姆·加德(Tim Gard)的回答,我发现此解决方案非常优雅……
$(".selector").append(content).append(function() { /*code goes here to run*/ });
Run Code Online (Sandbox Code Playgroud)
很简单 :)
使用when函数。
$('<div id="appendedItem">Here</div>').appendTo("body");
$.when( $("#appendedItem").length > 0).then(function(){
console.log( $("#appendedItem").length );
});
Run Code Online (Sandbox Code Playgroud)
我可以为您提供一些有关如何改进代码的提示。
for (var i = 0; i < arraycount; i++) {
$('#fourElementsonly').append('<table border = "1" id = "Portal_User_elements' + i + '" style = " border-collapse:collapse; width:800px; margin:0px; padding:0px; border-color:black"> </table>');
}
Run Code Online (Sandbox Code Playgroud)
可以变成:
var html = '';
for (var i = 0; i < arraycount; i++) {
html += '<table border = "1" id = "Portal_User_elements' + i + '" class="portalUserElements"> </table>';
}
$('#fourElementsonly').append(html);
Run Code Online (Sandbox Code Playgroud)
您将完成:
这意味着您还可以:
for (var i = 0; i < arraycount; i++) {
$('#Portal_User_elements' + i).empty();
}
Run Code Online (Sandbox Code Playgroud)
变为(无循环!):
$('.portalUserElements').empty();
Run Code Online (Sandbox Code Playgroud)
和:
for (var i = 0; i < arraycount; i++) {
$('#Portal_User_elements' + i).append(reports[i]);
}
Run Code Online (Sandbox Code Playgroud)
可能成为:
$('.portalUserElements').each(
function(i) {
$(this).append(reports[i]);
}
);
Run Code Online (Sandbox Code Playgroud)
编辑:建议这些更改以提高算法性能,同时保持其提供的全部功能。
您可能要压缩单个字符串变量(包括表)中的所有内容并将其附加在末尾。
请参阅Russ Cam在他的回答之一中建议您的文章。
小智 5
笨拙的方式...
一个函数(现有函数)处理所有附加项。追加之后的代码包装在新函数“ kickOffTheRestOfTheProcess”中。
在所有初始追加之后,您添加了一个最终追加。直到其他所有程序都不会执行。
$('body')).append("<script>kickOffTheRestOfTheProcess();</script>");
Run Code Online (Sandbox Code Playgroud)
对我有用。
以下解决方案适用于所有浏览器,尤其是 IE6。Firefox 中的响应时间为 10 秒,但 IE6 中为 2 分 30 秒。
$('#printall1').click(function() {
$('#fourElementsonly').empty();
var cleartable = 0;
var maxlimit = 0;
var presentarraycount = 0;
$.post("/PortalUserReport/getjunkdata", null, function(response, status) {
var report = eval(response);// we have 6000 records in the report now
var totalRecordsCount = report.length; // count = 6000
var totalRecordsCountfortheLoop = totalRecordsCount;
var arraycount = Math.ceil(totalRecordsCount / 1000);
var reports = new Array(arraycount); // reports[6]
for (var i = 0; i < arraycount; i++) {
$('#fourElementsonly').append('<table border = "1" id = "Portal_User_elements' + i + '" style = " border-collapse:collapse; width:800px; margin:0px; padding:0px; border-color:black"> </table>');
}
reports[presentarraycount] = "";
$.each(report, function(x) {
if (cleartable == 0) {
for (var i = 0; i < arraycount; i++) {
$('#Portal_User_elements' + i).empty();
}
cleartable++;
}
if (recordnumber <= totalRecordsCountfortheLoop) {
reports[presentarraycount] += "<tr style = \"height:20px; border: 1px Solid Black\"> <td style = \"width:50px; text-align:center \"> " + recordnumber + " </td> <td style = \"width:350px;\"> Name :" + report[x].FirstName + "</td> <td style = \"width:200px;\"> UserName :" + report[x].UserName + " </td> <td style = \"width:200px; \"> Company : " + report[x].Company + " </td> </tr>";
reports[presentarraycount] += "<tr style = \"height:20px; border: 1px Solid Black\"> <td > </td> <td> Registration Date : <label class = \"datepicker\"> " + report[x].ActiveDate + " </label> <td> User CN : " + report[x].UserCN + " </td> <td> Status: " + report[x].Status + " </td> </ td> </tr>";
reports[presentarraycount] += "<tr style = \"height:20px; border: 1px Solid Black\"> <td> </td> <td> User Privilege : " + report[x].Privileges + " </td> <td> </td> </tr>";
maxlimit++;
if (maxlimit == 1000) {
presentarraycount++;
reports[presentarraycount] = "";
maxlimit = 0;
}
}
recordnumber++;
});
for (var i = 0; i < arraycount; i++) {
$('#Portal_User_elements' + i).append(reports[i]);
}
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27075 次 |
| 最近记录: |