如何使用 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 选择关注它的元素的主要内容,如果未能解决你的问题,请参考以下文章