我注意到,在监控/尝试回答常见的jQuery问题时,有一些实践使用javascript,而不是jQuery,实际上可以让你写得更少,做得更…同样的量。而且还可能带来性能上的好处。

具体例子

$(this) vs this

在引用已单击对象id的单击事件中

jQuery

$(this).attr("id");

Javascript

this.id;

还有其他类似的常见做法吗?某些Javascript操作可以更容易地完成,而不需要使用jQuery。或者这是一种罕见的情况?(jQuery的“快捷方式”实际上需要更多的代码)

编辑:虽然我很欣赏关于jQuery和纯javascript性能的答案,但实际上我正在寻找更多量化的答案。在使用jQuery时,使用纯javascript而不是使用$()会更好(可读性/紧凑性)的实例。除了我在最初的问题中给出的例子。


当前回答

当:

您知道对于您正在做的事情,有坚定的跨浏览器支持 它并不是要输入更多的代码,而且 它的可读性并没有明显降低,而且 你有理由相信jQuery不会根据浏览器选择不同的实现来获得更好的性能,那么:

使用JavaScript。否则使用jQuery(如果可以的话)。

编辑:这个答案既适用于选择使用jQuery整体还是不使用它,也适用于选择是否在jQuery内部使用香草JS。在attr('id')和.id之间选择倾向于JS,而在removeClass('foo')和. classname = . classname之间选择。替换(新Regexp(“(?:^ | \ \ s +)”+ foo +”(?:\ \ s + | $)”,“g”),”)倾向于支持jQuery。

其他回答

如果您最关心的是性能,那么您的主要示例就一针见血了。在我看来,不必要或冗余地调用jQuery是导致性能变慢的第二个主要原因(第一个原因是DOM遍历不好)。

这并不是你真正想要的例子,但我经常看到这样的例子,所以值得一提:加快jQuery脚本性能的最佳方法之一是缓存jQuery对象,和/或使用链接:

// poor
$(this).animate({'opacity':'0'}, function() { $(this).remove(); });

// excellent
var element = $(this);
element.animate({'opacity':'0'}, function() { element.remove(); });

// poor
$('.something').load('url');
$('.something').show();

// excellent
var something = $('#container').children('p.something');
something.load('url').show();

这里有一个非技术的答案——许多工作可能不允许某些库,比如jQuery。

事实上,谷歌不允许在他们的任何代码中使用jQuery (React也不允许,因为它属于Facebook),直到面试官说“对不起,你不能使用jQuery,它不在XYZ公司的批准名单上”,你才可能知道这一点。Vanilla JavaScript绝对可以在任何地方、任何时候工作,并且永远不会给你这个问题。如果你依赖于一个库,是的,你得到了速度和轻松,但你失去了通用性。

另外,说到面试,另一个缺点是,如果你在代码测试中说你需要使用一个库来解决一个JavaScript问题,它给人的印象是你实际上并没有理解这个问题,这看起来有点糟糕。然而,如果你用原始的JavaScript来解决它,这表明你实际上理解并可以解决任何摆在你面前的问题。

这是我个人的观点,但无论如何jQuery是JavaScript,我认为理论上它不能比普通JS表现得更好。

但实际上,它可能比手工编写的JS执行得更好,因为手工编写的代码可能不如jQuery有效。

总之,对于较小的东西,我倾向于使用普通的JS,对于JS密集的项目,我喜欢使用jQuery,而不是重新发明轮子——它也更有效率。

$(this)与this不同:

通过使用$(this),可以确保jQuery原型被传递到对象上。

已经有了一个公认的答案,但我相信这里直接输入的答案不能在本机javascript方法/属性列表中全面地保证跨浏览器支持。为此,请允许我把你引向quirkmode

http://www.quirksmode.org/compatibility.html

它可能是关于在任何地方的任何浏览器上什么可以工作,什么不能工作的最全面的列表。请特别注意DOM部分。要读的东西很多,但重点不是全部读完,而是作为参考。

当我开始认真编写web应用程序时,我打印出了所有的DOM表,并把它们挂在墙上,这样我就能一眼知道哪些是安全的,哪些需要hack。这些天,当我有疑问时,我只是谷歌一些类似quirksmode parentNode兼容性的东西。

和其他事情一样,判断主要是一种经验。我不建议你阅读整个网站,记住所有的问题来弄清楚什么时候使用jQuery,什么时候使用纯JS。只是要注意这个列表。搜索起来很容易。随着时间的推移,你会发现什么时候纯JS更可取。


PS: PPK(网站的作者)也有一本非常好的书,我推荐你去读