Ок седлать ковбоев, потому что это будет длинный. Я проводил утро, проходя через некоторые из моих старых кодов, и мне не интересно узнать о лучших практиках и оптимизации. Чтобы не дойти до субъективной полосы, я просто отправлю несколько примеров, с которыми, надеюсь, легко ответить на вопросы. Я попытаюсь привести примеры очень просто для облегчения ответа и уменьшить вероятность ошибок. Здесь мы идем:
1) Назначение vs jQuery Calls
Я понимаю, что при доступе к селекторам, как правило, лучше назначать селектор переменной, а не делать один и тот же вызов более одного раза - ex.
$('div#apples').hide();
$('div#apples').show();
против.
var oranges = $('div#oranges');
oranges.show();
oranges.hide();
Используется ли это же правило при ссылке на jQuery $(this)
? Ex. Простой бит script, чтобы сделать некоторые данные в таблице доступными для кликов и настроить ссылку.
$('tr td').each( function() {
var colNum = $(this).index();
var rowNum = $(this).parent().index();
$(this).wrap('<a href="example.com/hello.html?column=' + colNum + '&row=' + rowNum +'">');
})
против.
$('tr td').each( function() {
var self = $(this);
var colNum = self.index()
var rowNum = self.parent().index()
self.wrap('<a href="example.com/hello.html?column=' + colNum + '&row=' + rowNum +'">');
});
2) this
vs $(this)
Хорошо, так что это следующий вопрос, о котором я давно задумывался, но я не могу найти никакой информации об этом. Пожалуйста, извините мое невежество. Когда имеет смысл называть ваниль js this
в отличие от обернутого jQuery $(this)
? Это мое понимание, которое -
$('button').click(function() {
alert('Button clicked: ' + $(this).attr('id'));
});
Менее эффективен, чем доступ к атрибуту DOM объекта vanilla this
, как показано ниже:
$('button').click(function() {
alert('Button clicked: ' + this.id);
});
Я понимаю, что там происходит, я просто задаюсь вопросом, следует ли придерживаться правила, когда вы решаете, что использовать.
3) Лучше ли более определенно?
Это довольно просто, ВСЕГДА полезно быть более конкретным с нашими селекторами? Легко видеть, что $('.rowStripeClass')
будет намного медленнее, чем $('#tableDiv.rowStripeClass')
, но где мы рисуем линию? Является ли $('body div#tableDiv table tbody tr.rowStripeClass')
еще быстрее? Любой вход будет оценен!
Если вы сделали это так, спасибо, что посмотрели! Если вы этого не сделали,: p