jQuery attualmente mi fornisce un'introduzione divertente a Javascript dopo 12 anni di sopravvivenza felicemente senza. Sono al punto in cui sto cercando di imparare il più possibile sull'ottimizzazione del codice che scrivo e, mentre ho trovato molti buoni materiali di riferimento, c'è qualcosa di abbastanza fondamentale che mi sta sconcertando e non ho potuto per trovare qualcosa su di esso ovunque.
Quando si allega un elemento a un elemento, come dovrei fare riferimento a quell'elemento all'interno della funzione. Ad esempio, quando si collega una funzione per l'evento click di un elemento:
$('#a_button',$('#a_list_of_buttons')).click(function() {
// NOW WHAT'S THE BEST WAY TO REFER TO '#a_button' ?
});
So di non continuare a ri-selezionandolo in questo modo come il browser deve cercare l'intera DOM di nuovo da zero per trovare ciò che è già trovato una volta :
$('#a_button').click(function() {
// I KNOW THAT THIS IS NAUGHTY
var buttonValue = $('#a_button').val();
$('#a_button').addClass('button_has_been_clicked');
});
Attualmente sto usando uno dei seguenti modi, ma non sono del tutto sicuro di quello che ciascuno è in realtà facendo:
$('#a_button').click(function() {
// USING this
var buttonValue = $(this).val();
$(this).addClass('button_has_been_clicked');
});
ma è appena ri-selezionando come nei abeti t esempio "cattivo"?
$('#a_button').click(function(event) {
// USING event.target
var buttonValue = $(event.target).val();
$(event.target).addClass('button_has_been_clicked');
});
Questo sembra che potrebbe essere migliore, ma è efficace per fare riferimento a '' event.target più volte?
$('#a_button').click(function(event) {
// USING A LOCAL VARIABLE
var thisButton = $(this);
// OR SHOULD THAT BE
var thisButton = $(event.target);
var buttonValue = thisButton.val();
thisButton.addClass('button_has_been_clicked');
});
Capisco l'efficienza delle prestazioni di cose che passano alle variabili ma sono incerto anche in queste situazioni utilizzando $ (this) o $ (event.target) mi offre già e così dalle stesse efficienze impostando una nuova variabile in realtà sto facendo più lavoro di cui ho bisogno.
Grazie.
La proprietà 'target' di oggetti evento è normalizzata in jQuery e lavorerà lo stesso in tutti i browser che supporta. Non è sempre uguale a "questo". –
@GenericTypeTea - il tuo metodo di vincita è quello che ho visto in quasi tutto il materiale di riferimento che ho letto ma no-dove ha spiegato perché hanno usato questo metodo, oltre a quello che utilizza l'equivalente di $ ('# a_button ') dovrebbe essere evitato in quanto richiede una nuova ricerca DOM ogni volta che viene utilizzato. –
@Tim - ha aggiornato la risposta. Grazie. – GenericTypeTea