如何使用 jQuery 选择关注它的元素

Posted

技术标签:

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

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

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

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

【问题讨论】:

你到底想做什么,我可以知道是否有更好的方法 ***.com/questions/967096/… 请注意,您可以使用$(':focus') 来查找当前文档中当前聚焦的元素。 【参考方案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")

【讨论】:

以上是关于如何使用 jQuery 选择关注它的元素的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何选择变量中的元素

如何使用jquery选择不是特定元素子元素的元素?

如何使用 jQuery 按名称选择元素?

如何使用jQuery选择没有特定类名的元素?

如何使用 jquery 选择父元素的兄弟?

如何使用 JQuery 选择容器元素内的第一个 div 元素?