javascript - 如何获取 'selectionchange' dom 事件的目标元素

标签 javascript html dom-events

我发现自己处于一种情况,我想获取触发 selectionChange dom 事件的目标元素。

但根据 https://developer.mozilla.org/en-US/docs/Web/Events/selectionchange 判断,在正常(非输入,非文本区域)情况下,似乎 e.target 中的元素始终是文档对象。

那么这是否意味着我必须手动调用 window.getSelection,找出当前光标位置并以此方式找到 dom 节点?

有人知道捷径吗?或者一些工作示例会很好。

最佳答案

如果您的元素可以成为事件元素,请使用 document.activeElement 获取我们在其中选择的元素。这将适用于文本区域、输入以及设置了 tabindex 的元素。

// NOTE: activeElement can only be found on selectable elements!

document.addEventListener('selectionchange',function(){
	document.getElementById('currentTag').innerHTML = document.activeElement.tagName;
});
#currentTag{
  font-weight:bold;
}
<textarea>This is sample text you can replace and move your cursor within. Whee!</textarea>

<br><input type="text" placeholder="Input">

<p tabindex="0">P tag text is the best tag text. <span color="blue">Unless you have a span.</span></p>

<ol tabindex="0">
  <li tabindex="0">Item 1</li>
  <li tabindex="0">Item 2</li>
</ol>

<p id="currentTag"></p>

关于javascript - 如何获取 'selectionchange' dom 事件的目标元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40034875/

相关文章:

javascript - 结合使用 php 和 jquery

javascript - 从 React 转换为 Mithril 2? (减数 split 的例子)

javascript - 使用 html5shim 库比 document.createElement ('header' 有什么好处吗?

php - 有什么方法可以在没有 cron 的情况下在托管 Web 服务器上自动运行 PHP 脚本?

javascript - 当覆盖 div 可见时,如何停止滚动页面?

javascript - 我如何判断一个元素是否在影子 DOM 中?

html - 在文本前面设置图像映射

javascript - 用JS检测图片(图片标签)是否加载

internet-explorer-9 - Internet Explorer 9、10 和 11 事件构造函数不起作用

angular - Ionic 事件在延迟加载模块之间无法正常工作