考虑下面的简单链接:
<a href="#" class="mylink">Link</a>
我了解当用户单击此元素时,有两种方法可以运行函数:
$(".mylink").click(function () {
和
<a href="javascript:myfunction();" class="mylink">Link</a>
两者之间是否存在性能差异,或者我应该使用一个而不是另一个的任何其他实际原因?
考虑下面的简单链接:
<a href="#" class="mylink">Link</a>
我了解当用户单击此元素时,有两种方法可以运行函数:
$(".mylink").click(function () {
和
<a href="javascript:myfunction();" class="mylink">Link</a>
两者之间是否存在性能差异,或者我应该使用一个而不是另一个的任何其他实际原因?
使用更好$('.mylink').click(function(){
,因为它遵循标准事件注册模型。(jQuery内部使用and )。addEventListener
attachEvent
基本上以现代方式注册事件是处理事件的不显眼的方式。此外,要为目标注册多个事件侦听器,您可以addEventListener()
为同一个目标调用。
阅读jQuery.click() 与 onClick 以及内联 Javascript(在 HTML 中)如何工作?
https://softwareengineering.stackexchange.com/questions/86589/why-should-i-avoid-inline-scripting
它们具有相同的功能行为,没有任何区别。
区别在于代码的模块化和可维护性。
使用第一种方法是首选且更合适的,因为它不会在 HTML 和 JavaScript 之间混合,这个概念称为Unobtrusive JavaScript。
如果您在 HTML 的早期工作过,那么您应该记得所有这些属性(如background
, color
, font
... 等)是什么时候出现的。
然后 CSS 出现了,每个人都告诉我们不要再使用那些旧的属性,因为它们将呈现与文档结构混合在一起,相反我们应该使用 CSS 来控制文档的布局和外观。
这类似于那个想法,但它现在用于代码,将功能与文档结构分开。
编辑:为了更准确,引用@mplungjan 评论:
没有区别是不正确的。href="javascript:myFunction()" 无法使用 preventDefault 取消实际点击或返回 false。因此,动画 gif 将在某些浏览器中停止运行,而旧版浏览器甚至会部分卸载页面。此外,如果函数返回一个值,页面将被替换为该值,当初学者尝试 href="javascript:window.open..." 并在页面上获取 [object object] 时看到
Jquery 与任何其他优秀的 JavaScript 框架一样,为您提供独立于浏览器平台的功能,包含所有您可能不关心或不想关心的复杂性。
我认为使用框架更好,而不是使用纯 JavaScript 并从头开始做所有的事情,除非你的使用非常有限。
我绝对推荐 JQuery!
第一个是事件侦听器的 JQuery 约定。您需要包含 jquery 库才能使用它。第二个是 Javascript 约定。您无需包含任何库或额外代码即可运行。在性能方面没有差异,但正如我所说,如果您不想包含任何类型的库,您应该使用第二个示例。