什么时候使用Vanilla JavaScript与jQuery?

2022-08-30 00:35:43

我注意到在监控/尝试回答常见的jQuery问题时,有一些使用javascript而不是jQuery的做法,实际上可以让你写得更少,做...嗯,同样的量。并且还可能产生性能优势。

一个具体的例子

$(this)this

在引用单击对象 ID 的单击事件中

jQuery

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

Javascript

this.id;

还有其他类似的常见做法吗?某些Javascript操作可以更容易地完成,而无需将jQuery带入其中。还是这种情况很少见?(一个jQuery的“快捷方式”实际上需要更多的代码)

编辑:虽然我很欣赏关于jQuery与普通javascript性能的答案,但我实际上正在寻找更定量的答案。在使用jQuery时,使用普通javascript而不是使用.cing实际上会更好(可读性/紧凑性)的实例。除了我在原始问题中给出的示例。$()


答案 1
  • this.id(如您所知)
  • this.value(在大多数输入类型上,我只知道当一个没有在其元素上设置属性或在Safari中没有设置无线电输入时,IE。<select>value<option>
  • this.className获取或设置整个“类”属性
  • this.selectedIndexagainst a 以获取所选索引<select>
  • this.optionsagainst a 以获取元素列表<select><option>
  • this.text反对 获取其文本内容<option>
  • this.rowsagainst a 以获取元素的集合<table><tr>
  • this.cells反对 a 以获得其细胞 (td & th)<tr>
  • this.parentNode获得直接父母
  • this.checked获取“感谢”@Tim“的已检查状态checkbox
  • this.selected获取“谢@Tim Down”的选定状态option
  • this.disabled获取“感谢”的禁用状态@Tim“向下”input
  • this.readOnly获取“谢谢”的只读状态,@Tim向下input
  • this.href针对元素以获取其<a>href
  • this.hostname针对一个元素来获取其域<a>href
  • this.pathname针对元素以获取其路径<a>href
  • this.search针对一个元素来获取其查询字符串<a>href
  • this.src针对一个元素,其中src

...我想你明白了。

有时性能至关重要。就像如果你在循环中多次执行某些事情一样,你可能想放弃jQuery。

通常,您可以替换:

$(el).attr('someName');

跟:

上面措辞不当。 不是替换,但它确实检索了从服务器发送的属性的值,并且其相应的属性将设置它。在某些情况下是必要的。getAttributesetAttribute

下面的句子有点涵盖了它。请参阅此答案以获得更好的治疗方法。

el.getAttribute('someName');

...以便直接访问属性。请注意,属性与属性不同(尽管它们有时相互镜像)。当然也有。setAttribute

假设您遇到过一个情况,即收到一个页面,您需要解开特定类型的所有标签的包装。使用jQuery它简短而简单:

$('span').unwrap();  // unwrap all span elements

但是如果有很多,你可能想做一些原生的DOM API:

var spans = document.getElementsByTagName('span');

while( spans[0] ) {
    var parent = spans[0].parentNode;
    while( spans[0].firstChild ) {
        parent.insertBefore( spans[0].firstChild, spans[0]);
    }
    parent.removeChild( spans[0] );
}

这段代码非常短,它比jQuery版本表现得更好,并且可以很容易地在你的个人库中成为一个可重用的函数。

看起来我与外部有一个无限循环,因为,但是因为我们正在处理一个“实时列表”,所以当我们执行.这是一个非常漂亮的功能,我们在使用数组(或类似数组的对象)时会错过它。whilewhile(spans[0])parent.removeChild(span[0]);


答案 2

正确的答案是,在使用jQuery而不是“普通的旧”原生JavaScript时,你总是会受到性能损失。这是因为jQuery是一个JavaScript库。它不是JavaScript的一些花哨的新版本。

jQuery之所以强大,是因为它做了一些在跨浏览器情况下过于乏味的东西(AJAX是最好的例子之一),并平滑了无数可用浏览器之间的不一致,并提供了一个一致的API。它还可以轻松促进诸如链接,隐含迭代等概念,以简化元素组一起工作。

学习jQuery不能代替学习JavaScript。你应该在后者中有一个坚实的基础,这样你才能充分体会到了解前者会让你更容易。

- 编辑以包含注释 -

正如评论很快指出的那样(我同意100%),上面的陈述指的是基准测试代码。一个“原生”JavaScript解决方案(假设它写得很好)将优于一个jQuery解决方案,后者在几乎所有情况下都完成了同样的事情(我很想看到一个例子)。jQuery确实加快了开发时间,这是一个显著的好处,我并不是要淡化它。它便于阅读,易于遵循的代码,这比一些开发人员能够自己创建的能力还要多。

在我看来,答案取决于你试图实现的目标。如果,正如我根据您对性能优势的参考所推测的那样,您正在以最快的速度离开应用程序,那么每次调用时,使用jQuery都会引入开销。如果你想要可读性,一致性,跨浏览器兼容性等,那么肯定有理由支持jQuery而不是“原生”JavaScript。$()