Я пытаюсь понять правильный способ кодирования.
Мой HTML
<div id="foo">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
Если я хочу добавить класс bar
ко всем дочерним divs div foo
, каким образом я должен использовать?
Вариант 1 (получился третий)
jQuery( '#foo > div' ).addClass( 'bar' );
Вариант 2 (получился 4-й быстрее)
jQuery( '#foo' ).children( 'div' ).addClass( 'bar' );
Вариант 3 (оказался самым быстрым)
jQuery( '#foo' ).children( 'div' ).each(function(){
jQuery( this ).addClass( 'bar' )
});
Вариант 4 (получился очень близко 2-го)
jQuery( '#foo > div' ).each(function(){
jQuery( this ).addClass( 'bar' )
});
Все это выполняет то, что я хочу. Мой вопрос:
Какой из них я должен использовать над другим? В каких случаях следует использовать .each
?
Изменить с добавленным фрагментом, который показывает, используя каждый, лучше, чем другие методы
var t0_start = performance.now();
$('#parent > div').addClass( 'bar' );
var t0_end = performance.now();
var t1_start = performance.now();
$('#parent').children('div').addClass( 'bar' );
var t1_end = performance.now();
var t2_start = performance.now();
$( '#foo > div' ).each(function(){
$( this ).addClass( 'bar' )
});
var t2_end = performance.now();
var t3_start = performance.now();
$( '#foo' ).children( 'div' ).each(function(){
$( this ).addClass( 'bar' )
});
var t3_end = performance.now();
outcome = 'selector: ' + (t0_end - t0_start);
outcome += "\n";
outcome += 'children(): ' + (t1_end - t1_start)
outcome += "\n";
outcome += 'selector: each(): ' + (t2_end - t2_start)
outcome += "\n";
outcome += 'children(): each(): ' + (t3_end - t3_start)
alert(outcome);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="parent"><div></div><div></div><div></div></div>