当前位置: 首页 > 面试题库 >

何时使用Vanilla JavaScript vs.jQuery?

章安易
2023-03-14
问题内容

我注意到在监视/尝试回答常见的jQuery问题时,有一些使用javascript(而不是jQuery)的实践实际上使您能够 编写更少的代码,并且做得
…数量相同。并且还可能产生性能优势。

一个具体的例子

$(this)this

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

jQuery的

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

Java脚本

this.id;

还有其他类似的常规做法吗?无需将jQuery混用就可以更轻松地完成某些Javascript操作的地方。还是这是罕见的情况?(实际上是需要更多代码的jQuery“快捷方式”)

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


问题答案:
  • this.id (如你所知)
  • this.value(对于大多数输入类型。当我<select>没有value在其<option>元素上设置属性或Safari中的单选输入时,我所知道的唯一问题就是IE 。)
  • this.className 获取或设置整个“类”属性
  • this.selectedIndex针对<select>以获取选定的索引
  • this.options针对<select>以获取<option>元素列表
  • this.text反对<option>以获取其文本内容
  • this.rows反对<table>获取<tr>元素集合
  • this.cells针对a <tr>以获得其细胞(td&th)
  • this.parentNode 得到直接父母
  • this.checked获取的检查状态checkbox
  • this.selected获取的选定状态option
  • this.disabled获取的禁用状态input
  • this.readOnly获取的readOnly状态input
  • this.href反对<a>获得它的元素href
  • this.hostname针对<a>元素以获取其域href
  • this.pathname针对<a>元素以获取其路径href
  • this.search针对<a>元素以获取其查询字符串href
  • this.src 针对有效的元素 src

…我想你应该已经明白了。

有时性能至关重要。就像您多次循环执行某项操作一样,您可能想抛弃jQuery。

通常,您可以替换:

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

与:

上面措辞不好。getAttribute不是替代品,但是它确实检索了从服务器发送的属性的值,并且它的对应属性将对其setAttribute进行设置。在某些情况下是必需的。

下面的句子涵盖了它。以获得更好的治疗。

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版本性能更好,并且可以很容易地在您的个人库中变成可重用的函数。

似乎while由于的缘故,我与外部之间存在无限循环while(spans[0]),但是由于我们正在处理“活动列表”,所以在执行时它会更新parent.removeChild(span[0]);。这是一个非常漂亮的功能,当我们使用数组(或类似数组的html" target="_blank">对象)时,我们会错过它。



 类似资料:
  • 问题内容: 我一直在nodejs中编程,研究了如何同时使用socket.io和对节点服务器的ajax调用。socket.io是否设计为替代ajax?我很好奇,在哪种情况下使用socket.io更好,而哪种ajax更好。感谢您的输入。 问题答案: 好吧,Web套接字(通过socket.io)提供的主要内容之一就是ajax缺乏的是服务器推送。因此,对于ajax,如果您想了解服务器上的新事件(例如,另一

  • 我和我的团队一直在使用Spring boot开发一系列微服务。由于服务经历了JUnit和Spring Boot升级(我们现在使用的是Spring Boot 2和JUnit 5),不同开发人员实现的不同JUnit现在使用不同的模式: @扩展为 今天,它们之间的区别是什么?我们真的需要它们来进行单元测试还是嵌入到一些新的Spring Boot注释中?

  • 问题内容: 我得到了asyncio在Python 3.5 中使用的流程,但是我还没有看到关于我应该使用什么东西,我不应该使用的await东西或者它在哪里容易出现的描述。我是否仅需要根据“这是IO操作并应进行await编辑” 来做出最好的判断? 问题答案: 默认情况下,所有代码都是同步的。你可以使用使其异步定义函数,async def并使用来“调用”这些函数await。一个更正确的问题是“什么时候应

  • 问题内容: 我感觉好像总是被教导要使用s,并且我经常看到它们与s 混合使用,以在应该在不同页面上执行相同操作的几段代码中完成相同类型的查询。开始: 那就是我正在从事的工作: 我看到很多像: 似乎LEFT也可能是INNER,有没有抓住的机会? 问题答案: 有收获吗?是的-左联接是外联接的一种形式,而内联接是内联接的一种形式。 这是显示差异的示例。我们将从基本数据开始: 在这里,我们将看到内部联接和左

  • 问题内容: 定制JPA映射器类具有以下方法: 如果我正确理解clear(),它将从上下文中删除所有持久性实体。-资源 但是,我也在这里阅读, 关于何时调用clear()的明确准则是什么? 问题答案: 文章对此进行了解释。清除实体管理器将清空其关联的缓存,从而迫使新的数据库查询在事务中稍后执行。使用事务绑定的实体管理器时,几乎几乎不需要清除实体管理器。我看到有两个原因需要清除: 在进行批处理时,为了

  • 我编写jUnit测试用例有3个目的: 确保我的代码满足所有(或大部分)输入组合/值下所需的所有功能。 以确保我可以更改实现,并依靠JUnit测试用例来告诉我,我的所有功能仍然得到满足。 作为我的代码处理的所有用例的文档,并作为重构的规范--如果需要重写代码的话。(重构代码,如果我的jUnit测试失败--您可能错过了一些用例)。 我不明白为什么或者什么时候应该使用。当我看到被调用时,它告诉我,我的j

  • 自定义JPA映射器类有一个方法: 如果我正确理解clear(),它将从上下文中删除所有持久实体-来源 然而,我也在这里读到, 关于何时调用 clear() 的明确准则是什么?

  • 我正在阅读OracleDocGenericmethod中的泛型方法。当它说什么时候使用通配符和什么时候使用泛型方法时,我对比较感到很困惑。引用文档。 我们本可以在这里使用通用方法: [...]这告诉我们类型参数正被用于多态;它的唯一作用是允许在不同的调用站点使用各种实际的参数类型。如果是这样的话,应该使用通配符。通配符旨在支持灵活的子类型,这就是我们在这里试图表达的。 我们不觉得像《代码》(Col