2012-12-19 41 views
1
function removeTds() { 
    var elements = $('#goldBarList tr:not(:eq(0))').filter(':has(:checkbox:checked):lt(50)'); 
    var count = elements.length; 
    elements.each(function() { 
     grossWeightTotal = grossWeightTotal - $('#goldBarList tr:eq(' + $(this).index() + ') td:eq(8)').text(); 
     netWeightTotal = netWeightTotal - $('#goldBarList tr:eq(' + $(this).index() + ') td:eq(9)').text(); 
     fineOunceTotal = fineOunceTotal - $('#goldBarList tr:eq(' + $(this).index() + ') td:eq(10)').text(); 
    }); 
    elements.remove(); 
    if(count === 50) window.setTimeout(removeTds, 1); 
} 
removeTds(); 

上面的代码导致“停止运行此脚本?”提示。我有4000条记录。如何提高性能..?

回答

8

您的代码本质上很慢并且可以优化(例如,缓存$(this).index()),但最大的问题是如果您有50 * N条记录(例如4000 ...),请求浏览器每1毫秒运行一次函数。

只需一次清洁一切。

例如:

function removeTds() { 
    var elements = $('#goldBarList tr:not(:eq(0))').filter(':has(:checkbox:checked)'); 
    elements.each(function() { 
     var index = $(this).index(); 
     grossWeightTotal = grossWeightTotal - $('#goldBarList tr:eq(' + index + ') td:eq(8)').text(); 
     netWeightTotal = netWeightTotal - $('#goldBarList tr:eq(' + index + ') td:eq(9)').text(); 
     fineOunceTotal = fineOunceTotal - $('#goldBarList tr:eq(' + index + ') td:eq(10)').text(); 
    }); 
    elements.remove(); 
} 
removeTds(); 

如果你想拥有洁净时复选框改变被翻拍,补充一点:

$('input[type="checkbox"]').change(removeTds); 

当然,你也可以绑定到一个按钮:

$('#removeButton').change(removeTds); 
+0

其实事情是当用户点击删除按钮我必须删除所有已检查复选框的行,我需要吨o减去总数...在最大我可以有4000行.. – user1912935

+0

浏览器提醒停止运行脚本?有或没有选择... – user1912935