E 'molto più veloce di utilizzare una variabile denominata invece di passare un selettore jQuery, una volta per ogni azione. Tuttavia, come già accennato, il concatenamento è una soluzione ottimale nella maggior parte dei casi. Puoi vederlo da solo. Ecco una prova che ho appena fatto:
<script src="http://code.jquery.com/jquery-1.4.4.min.js" type="text/javascript"></script>
<script>
$(function(){
//Try changing this value to see what happens as the number of nodes increases or decreases.
for(i=1;i<2905;i++){
$('body').append('<div id="'+i+'">'+i+'</div>')
}
//Case 1: Query the DOM once for each action
var start = new Date().getTime();
$('#2900').css('color','red');
$('#2900').hide();
$('#2900').show();
$('#2900').html(new Date().getTime() - start);
//Case 2: Chaining. Each method passed $('this') to the next one
var start = new Date().getTime();
$('#2901').css('color','blue').hide().show().html(new Date().getTime() - start);
//Case 3: Use of a named variable
var start = new Date().getTime();
var a = $('#2902');
a.css('color','green');
a.hide();
a.show();
a.html(new Date().getTime() - start);
})
</script>
UPDATE:
Apparentemente Firefox fa un qualche tipo di caching e tre casi eseguire in modo molto simile. Dall'altra parte, Chrome e Safari hanno prestazioni piuttosto scarse nel caso 1, rispetto ai casi 2 e 3 (soprattutto all'aumentare del numero o dei nodi).
'$ (pulsante di anteprima)' è un errore di sintassi e anche se si utilizza il termine "selettore" nella domanda, non è chiaro se si sta facendo riferimento a una stringa di selezione (ad esempio '$ ('# anteprima -button ') ') o avvolgendo un nodo DOM esistente o una raccolta jQuery (ad esempio' $ (someExistingReference) '). Quest'ultima sarà ancora più lenta di una variabile memorizzata, ma non così drastica come la prima (a seconda della stringa del selettore e del documento). – eyelidlessness