【问题标题】:How to select an element that has focus on it with jQuery如何使用 jQuery 选择关注它的元素
【发布时间】:2010-10-05 16:39:43
【问题描述】:

如何选择具有当前焦点的元素?

在 jQuery 中没有 :focus 过滤器,这就是为什么我们可以使用这样的东西:

$('input:focus').someFunction();

【问题讨论】:

  • 你到底想做什么,我可以知道是否有更好的方法
  • 请注意,您可以使用$(':focus') 来查找当前文档中当前聚焦的元素。

标签: jquery focus css-selectors


【解决方案1】:

$(document.activeElement) 将返回当前聚焦的元素,比使用伪选择器:focus 更快。

来源:http://api.jquery.com/focus-selector/

【讨论】:

  • this 应该是选择的答案。没有 DOM 遍历,并且比这里提供的任何其他解决方案都要快。
  • 这是正确的答案。 jQuery 文档甚至说当你只想要当前选择的元素时不要使用 :focus 伪选择器。
  • 是的,即使是 jquery 文档也推荐这种方法而不是伪查询。
  • 这似乎在 Chrome 中不起作用。当我在 Opera 中使用它点击一个元素时,我得到了正确的 id。但是在 Chrome 中我变得空白。上面的另一个解决方案虽然做同样的事情,所以这仍然是最好的解决方案。
  • 遗憾的是,这在 chrome 中不起作用,它总是返回正文。
【解决方案2】:
alert($("*:focus").attr("id"));

我使用 jQuery。

它会提醒 id 元素正在聚焦。

希望对你有用。

【讨论】:

  • 据我所知,自从 OP 提出这个问题以来,jquery 已经添加了对 :focus 过滤器的支持,所以这个答案现在有效。
  • 性能不佳,尽可能使用 document.activeElement。
  • jesus - 你真的使用 * 作为选择器?你知道 * 选择 ALL 元素吗?每个该死的桌子上的每个 td。 93 票?
  • Sam Shiles 的回答,建议使用 $(document.activeElement),是一个更好的解决方案。直接来自 :focus 伪选择器上的 jQuery 文档页面:“如果您正在寻找当前聚焦的元素,$( document.activeElement ) 将检索它而无需搜索整个 DOM 树。”
  • @kingjeffrey,只有当你不知道它有多穷时它才是完美的!
【解决方案3】:

最好的方法是为 onFocus 事件设置一个处理程序,然后将一个变量设置为具有焦点的元素的 ID。

类似这样的:

var id;

$(":input").focus(function () {
     id = this.id;
});

【讨论】:

  • 为什么 $(this).attr('id') 使用 this.id
  • 小心,因为窗口也可以接收焦点,这意味着此代码在所有情况下都不会按预期工作。
  • 窗口是输入吗?此代码表示仅选择输入元素。所以窗口不会触发回调。
  • Sam Shiles 的回答似乎是迄今为止最好的。
  • 不起作用(对我而言),请改用 Sams 或 Marcus 的回答。
【解决方案4】:

你试过了吗

$.extend($.expr[':'], {
    focused: function(elem) { return elem.hasFocus; }
});

alert($('input :focused').length);

【讨论】:

  • document.hasFocus() 确实存在,但这样的方法或属性不适用于元素。在 Firefox 和 Chromium 中尝试过。
【解决方案5】:

如果你使用JQuery,你可以写一个selector like this

$.expr[':'].focus = function(a){ return (a == document.activeElement); }

然后您可以选择当前聚焦的元素:$(":focus")

不仅表单控件可以有焦点。任何带有 tabindex 的 html 元素都可以在现代浏览器中获得焦点。

【讨论】:

  • 这样的表现如何? jQuery 1.7.3 似乎也已经实现了 $(".:focus")。如果没有您的实施,它至少可以正常工作。
【解决方案6】:

摘自当前 jQuery 版本 (1.7) 文档的示例:

$(elem).is(":focus");

【讨论】:

    【解决方案7】:

    用于检查元素是否有焦点。

    if ($("...").is(":focus")) {
      ...
    }
    

    【讨论】:

      【解决方案8】:

      这是它的 CoffeeScript 版本。基于 jmanrubia 的代码:

      $.expr[':'].focus = (a) -> a is document.activeElement

      你也可以这样称呼它$(".:focus")

      【讨论】:

        猜你喜欢
        • 2013-05-27
        • 1970-01-01
        • 2021-06-20
        • 2011-12-19
        • 1970-01-01
        • 2019-05-21
        • 2014-06-24
        • 2011-11-19
        • 2012-04-12
        相关资源
        最近更新 更多