【问题标题】:Speed up :visible:input selector avoiding filter加速:可见:输入选择器避免过滤器
【发布时间】:2011-01-29 13:57:15
【问题描述】:

我的 jQuery 选择器在我不幸的大页面上运行速度太慢:

$("#section").find(":visible:input").filter(":first").focus();

有没有一种更快的方法来选择第一个可见输入,而不必找到所有可见输入然后过滤第一个选择?我想要:visible:input:first 之类的东西,但这似乎不起作用。

[编辑] 以下是#section 的基本概念:

<div id="section">
    <div>
        Some text <input type="text">
    </div>
    <div>
        etc. etc. <input type="text">
    </div>
</div>

【问题讨论】:

  • 你能发布#section元素的html吗?
  • @Alex 这是一个包含子 div 和许多表单元素的 div。
  • 所以只有&lt;input type="text"&gt; 元素?我更新了我的答案。
  • 对不起,我的例子太简单了。第一个输入类型也可以是下拉菜单或文本区域。它是动态 UI 生成的一部分。

标签: javascript jquery performance jquery-selectors


【解决方案1】:
$(":input:visible:first", "#section").focus();

如果您首先过滤控件类型,则可以避免检查所有 #section 元素上的 :visible

您似乎只需要捕获第一个可见的input type="text"
这应该会快一些。

$("input[type='text']:visible:first", "#section").focus();

【讨论】:

  • 这是一个不同的选择器,:input != input
  • 谢谢,这次更新快了大约 80 毫秒。然而,这个选择器在 IE6 中仍然花费 156 毫秒。我觉得这应该是一个 16 毫秒或更短的快速查找。有没有其他方法可以优化这个?
  • 我接受这个答案的第一部分。似乎是最快的方法。谢谢!
【解决方案2】:

如何将class="default_field" 添加到每个页面的默认字段,然后使用$('.default_field').focus();

这样做的难易程度当然取决于您的服务器端技术,但优点是它减轻了客户端的处理负担(这对 IE6 来说尤为重要),而且它还为您提供了以下灵活性:在合适的页面上选择一个默认输入,而不是第一个输入。

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多