2013-12-02 2 views
0

На данный момент я использую $('.class:not(:empty)').html('');, и это все еще занимает слишком много времени для меня.Самый быстрый способ выпустить много divs, по классу?

Например, занимает ~ 2 секунды с ~ 1200 непустых divs и ~ 2000 divs в общей сложности.

Кроме того, было бы проще просто удалить divs полностью?

+1

Почему вы просто не пытаются '.remove' их? – bevacqua

+0

Самый быстрый способ: JS. не jQ. –

+0

Почему у вас есть все эти пустые divs в первую очередь? – jeff

ответ

7

Вы можете попробовать:

$('.class').empty(); 

Вы не отфильтруете все .class эсов для непустых те, которые занимают много времени - просто очистить все из них.

Тест производительности:

$('.class').empty();    // 23.810ms, 31.646ms, 24.003ms ~ 26,486ms 
$('.class:not(:empty)').empty(); // 25.469ms, 27.323ms, 24.964ms ~ 25,919ms 

$('.class').html('');    // 34.353ms, 48.778ms, 44.487ms ~ 42,539ms 
$('.class:not(:empty)').html(''); // 34.751ms, 27.494ms, 35.428ms ~ 32,558ms 

И простое удаление всех элементов:

$('.class').remove;    // 77.650ms, 68.968ms, 69.281ms ~ 71,966ms 

Этот тест был сделан с:

$('body').empty() 
for (var i = 0; i < 1200; i++) $('<div class="class">not-empty</div>').appendTo($('body')); 
for (var i = 0; i < 2000; i++) $('<div class="class"></div>').appendTo($('body')); 

console.time('timer'); 
    // proper method 
console.timeEnd('timer') 
+0

Не требуется больше времени для запуска .empty() на непустых, чем для их фильтрации? – Bogdan

+0

@Bogdan Я сделал несколько тестов. Как вы можете видеть, нет разницы между классами .class и '.class: not (: empty)' в первой паре теста. Однако ключом производительности в вашей проблеме является использование '.empty()' вместо '.html ('')'. – hsz

+0

@Bogdan Удаление этой кучи divs занимает гораздо больше времени, чем очистка. – hsz

0

Попробуйте это:

$("div.ClassName").html(''); 

или

$("div.ClassName").empty(); 
Смежные вопросы