好的,给牛仔装上鞍,因为这会很长。我整个上午都在浏览我的一些旧代码,我想知道最佳实践和优化。为了避免在主观车道上骑行,我将发布一些示例,其中包含一些希望易于回答的问题。我将尽量使示例保持简单,以便于回答并减少出错的可能性。开始了:
1) 赋值与 jQuery 调用
我知道在访问选择器时,通常认为将选择器分配给变量而不是多次进行相同的调用会更好 - 例如。
$('div#apples').hide();
$('div#apples').show();
对比
var oranges = $('div#oranges');
oranges.show();
oranges.hide();
引用 jQuery 时,同样的规则是否适用$(this)
?前任。一个简单的脚本,使表格中的一些数据可点击并自定义链接。
$('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
对比$(this)
好的,所以下一个是我想知道很长时间的事情,但我似乎找不到任何关于它的信息。请原谅我的无知。什么时候调用 vanilla jsthis
而不是 jQuery Wrapped才有意义$(this)
?我的理解是——
$('button').click(function() {
alert('Button clicked: ' + $(this).attr('id'));
});
比访问 vanillathis
对象的 DOM 属性效率低得多,如下所示 -
$('button').click(function() {
alert('Button clicked: ' + this.id);
});
我了解那里发生了什么,我只是想知道在决定使用哪个时是否有经验法则可以遵循。
3)更多的特异性总是更好吗?
这很简单,我们的选择器更具体总是有益的吗?很容易看出这$('.rowStripeClass')
会比 慢得多$('#tableDiv.rowStripeClass')
,但是我们在哪里画线呢?$('body div#tableDiv table tbody tr.rowStripeClass')
还是更快?任何输入将不胜感激!
如果您已经做到了这一点,感谢您的关注!如果你还没有,:p </p>