可通过 document.activeElement 获取当前聚焦的 DOM 元素,它返回只读的 Element 节点,页面加载时通常为 <body> 或 <html>,用户交互后更新为实际聚焦元素;需配合 focusin/focusout 事件监听焦点变化,并注意 iframe 及跨域限制。

可以通过 document.activeElement 获取当前聚焦的 DOM 元素。
直接访问 activeElement 属性
document.activeElement 是一个只读属性,返回当前获得焦点的元素(如输入框、按钮、可聚焦的元素等)。页面加载时通常为 <body> 或 <html>,用户交互后会更新为实际聚焦的元素。
- 它始终返回一个 Element 节点,即使焦点在非元素区域(如空白处),也常返回
<body> - 如果页面无任何可聚焦元素获得焦点,可能返回
<body>或<html>,具体取决于浏览器和文档状态 - 注意:iframe 内容需通过其 contentDocument 访问各自的
activeElement
配合 focusin/focusout 事件监听焦点变化
仅靠轮询 activeElement 效率低,推荐用事件监听动态响应:
- 监听
focusin(冒泡)或focus(不冒泡)事件捕获聚焦动作 - 监听
focusout或blur捕获失焦动作 - 在事件回调中访问
event.target或再次读取document.activeElement确认当前焦点元素
判断元素是否真正可聚焦且已聚焦
activeElement 可能返回不可见或禁用元素,建议做安全检查:
立即学习“Java免费学习笔记(深入)”;
- 检查
el.matches(':focus')(更可靠,但需注意伪类匹配时机) - 检查
el.offsetParent !== null和!el.hasAttribute('disabled')排除隐藏或禁用元素 - 对 input、textarea、button 等常用元素,还可结合
el.type !== 'hidden'过滤
处理 iframe 中的焦点元素
若页面含 iframe,其内部焦点不会反映在主文档的 activeElement 中:
- 需先获取 iframe 元素,再访问其
contentDocument.activeElement - 注意跨域 iframe 会因安全限制抛出错误,应包裹 try/catch
- 可通过
iframe.contentWindow?.document?.activeElement安全访问(可选链)


















