【问题标题】:What is the best way to check if a selector exists?检查选择器是否存在的最佳方法是什么?
【发布时间】:2011-12-25 12:58:55
【问题描述】:

使用 JQuery,要检查选择器是否存在,我会执行以下操作:

if ($(selector).length > 0) { ... }

但我想这可能不是最好的方法,因为我只想知道选择器是否存在,而不是有多少。出于优化原因,有没有办法在第一次出现时停止搜索?

谢谢!

编辑:澄清一下:我想避免使用“长度”方法,因为它会检查所有 DOM。我只想在发现一个事件时停止

【问题讨论】:

标签: jquery optimization


【解决方案1】:

用这个,

if( $('#idofelement'))  or
if( $('.classname')  )

【讨论】:

  • .size().length() 没有什么不同。查看jQuery代码,它们是相同的。
  • 这个答案不正确。当元素不存在时,返回 length=0 的对象。对象始终是真值,因此您的断言始终为真。
  • @RobW 但这是不公平的,即使我通过 id 也返回数组元素有点误导。如果我传递类名或标签名等,我同意它是否返回我的元素数组。
  • jQuery 没有ids 的特殊返回值。以这种方式查看它,您要求“与给定选择器匹配的所有元素的 jQuery 列表”。如果没有匹配项,这可能是一个空列表。
  • @RobW 是的,我同意你的看法。从 jQuery 选择器的角度来看,这是合理的。:-) 谢谢
【解决方案2】:

理论上,您可以将 :first 附加到查询中以限制结果 (http://api.jquery.com/first-selector/),但实际上它会使您的查询变慢,因为它会阻止 jQuery 使用现代浏览器的原生 querySelectorAll() 功能。

【讨论】:

    【解决方案3】:

    没有更有效的方法可以让 jQuery 在找到匹配的元素后停止。
    在 Vanilla(“纯”)JavaScript 中甚至不可能将 document.getElementsByTagName("p") 限制为仅匹配一个元素,而不会降低性能。

    【讨论】:

    • 此外,没有令人信服的理由这样做。寻找优化的机会很好,但我们在这里谈论的不仅仅是毫秒,而是纳秒。在具有 160 个跨度的测试页面上的操作 $('span').length 花费了“1 毫秒”。 1 毫秒是 .getTime() 给我们的最短时间间隔,所以它可能会更短。
    猜你喜欢
    • 2011-05-25
    • 2012-08-29
    • 2011-03-20
    • 2012-04-02
    • 2010-09-18
    • 2014-05-25
    • 2012-06-17
    相关资源
    最近更新 更多