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

jQu*_*ver 64 jquery focus css-selectors

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

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

$('input:focus').someFunction();
Run Code Online (Sandbox Code Playgroud)

Sam*_*les 153

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

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

  • *这个*应该是选择的答案.没有DOM遍历,并且比这里提供的任何其他解决方案快得多. (33认同)
  • 这是正确的答案.当你只想要当前选中的元素时,jQuery文档甚至会说不使用:focus伪选择器. (3认同)
  • 是的,即使是jquery文档也会在伪查询上推荐这种方法. (2认同)

小智 123

alert($("*:focus").attr("id"));
Run Code Online (Sandbox Code Playgroud)

我使用jQuery.

它将警告元素的id正在聚焦.

我希望它对你有用.

  • 性能很差,尽可能使用document.activeElement. (14认同)
  • 耶稣 - 你真的使用*作为选择器吗?你知道*选择_ALL_元素吗?每个该死的桌子上的每一个td.93赞成? (9认同)
  • Sam Shiles回答,建议使用$(document.activeElement),是一个更好的解决方案.直接来自jQuery docs页面:focus伪选择器:"如果你正在寻找当前关注的元素,$(document.activeElement)将检索它而不必搜索整个DOM树." (6认同)
  • 从我可以收集的内容来看,自从OP提出这个问题以来,对jquery的支持已添加了`:focus`过滤器,所以这个答案现在有效了. (4认同)
  • 我认为应该选择这个作为答案.谢谢BiBi (2认同)

Mik*_*e_G 32

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

这样的事情:

var id;

$(":input").focus(function () {
     id = this.id;
});
Run Code Online (Sandbox Code Playgroud)

  • IS窗口输入?此代码表示仅选择输入元素.所以窗口不会触发回调. (9认同)
  • 到目前为止,Sam Shiles的回答似乎是最好的. (4认同)
  • 因为窗口也可以获得焦点,这意味着此代码在所有情况下都无法正常工作. (3认同)

ben*_*wey 5

你有没有尝试过

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

alert($('input :focused').length);
Run Code Online (Sandbox Code Playgroud)


jma*_*bia 5

如果你使用JQuery,你可以编写一个这样选择器:

$.expr[':'].focus = function(a){ return (a == document.activeElement); }
Run Code Online (Sandbox Code Playgroud)

然后,您可以选择当前关注的元素: $(":focus")

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