JQuery :当浏览器未聚焦时聚焦

JQuery :focus when the browser ain't focused

在不考虑性能的情况下,我总是认为由 $(":focus") 编辑的 jquery 对象 return 等同于 $(document.activeElement)

但是,如果您闯入浏览器调试器并计算 $(":focus"),您将不会获得任何元素,而 $(document.activeElement) 仍将是 return 焦点元素。我在考虑某种观察者效应问题,但如果您将焦点设置在浏览器之外也是如此。

根据 jquery documentation,焦点选择器应该“选择当前焦点的元素”。由于没有提及浏览器焦点,我想知道这是预期的行为还是应该作为错误报告。

如果您想尝试这种行为,我创建了一个 JsFiddle 示例。当您将注意力从输入上移开时(在表单中、控制台中或其他应用程序中),您会看到 $(":focus") 如何反应。

如您所见CSS :focus Selector

The :focus selector is allowed on elements that accept keyboard events or other user inputs.

并且document.activeElement可以包含页面中的任何或几乎任何元素

查看 :focus 选择器的源代码:

"focus": function( elem ) {
    return elem === document.activeElement
        && (!document.hasFocus || document.hasFocus()) 
        && !!(elem.type || elem.href || ~elem.tabIndex);
}

所以为了返回元素,elem 必须等于 document.activeElement,文档必须有焦点,元素必须有 typehref, 或 tabIndex 属性.

两者不等价


编辑

在您的 fiddle 中,当您从输入中移除焦点时,document.activeElement 变为 body,文档是否具有焦点并不重要。