2012-12-19 5 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 ...)가있는 경우 브라우저에 1ms마다 기능을 실행하도록 요청하는 것입니다.

간단히 모두 청소하십시오. 예를 들어

:

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