【问题标题】:improve inefficient jQuery selector改进低效的 jQuery 选择器
【发布时间】:2014-06-24 10:42:55
【问题描述】:

在 IntelliJ 中,如果我使用 jQuery 选择器,例如:

$('#roleField option').each(function() {
    // impl omitted
});

选择器突出显示我应该提出的建议

拆分以 ID 选择器开头的后代选择器

IntelliJ 究竟建议我应该用什么替换上面的选择器?

【问题讨论】:

  • 我认为$('#roleField').find('option')
  • 不确定它是否指的是它,但事实证明使用 find 子选择器要快得多 - $('#roleField').find('option').each()
  • 似乎是一个愚蠢的警告。虽然使用 .find 可能会提高几毫秒的速度,但为了易于阅读而牺牲它并不值得。我个人(已经专业使用 jQuery 6 年了)不要使用.find,除非它在分配的变量上。如果我有selector,就像你在上面显示的那样,我只会做你正在做的事情,$('#id child')。真的没有理由用$('#id').find('child')替换它
  • 我认为因为如果你单独使用 id 选择器,那么 jQuery 可能会使用 getElementById() 来获取第一条记录...

标签: javascript jquery intellij-idea


【解决方案1】:

尝试在这里使用.find()

$('#roleField').find('option').each(function() {
    // impl omitted
});

您的警告似乎与选择器的效率有关。

Related thread

【讨论】:

  • 已在 cmets 和您发布的链接中回答。您不应该发布链接作为答案 - 您应该使用关闭按钮。
  • @Archer 是的,但他提供了一个实际的答案。虽然,在你告诉人们它“相当”快之前,请张贴一些证据。多年来,我一直在使用子选择器并保存 .find 以仅用于变量,并且从未见过任何“相当大的”差异。换句话说,我从不认为它会更快,并且我在早期尝试过两种方式。
  • @Archer 评论是 cmets,答案是答案,这是 IntelliJ 而不是 PHPStorm,我也不会将链接作为分析器发布。
  • 您提供的链接显示了与您建议的完全相同的代码更改完全相同的问题。您应该通过链接向 OP 指出这一点。
【解决方案2】:

根据 jquery 文档,此方法不会通过 Sizzle 扇区引擎:

$('#roleField option').each(function() {
    // No Sizzle
}); 

这个会去哪里:

$('#roleField').find('option')  // Sizzle!

查看 ID 基本选择器部分 here。因此,第二种方法会比第一种更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2011-11-07
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多