我试图通过循环遍历startContainer的父母来从选定的上下文中获取锚标记,如下所示:
function getUrlFromSelection() {
let $target = document.getSelection().getRangeAt(0).startContainer;
while ($target.nodeName.toLowerCase() !== 'body') {
if ($target.nodeName.toLowerCase() === 'a') {
return $target;
}
$target = $target.parentNode;
}
return null;
}
这很好用,但Edge似乎跳过了锚标记。
让我们来看一个例子:
<div>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
diam nonumy <a href="#">eirmod</a> tempor invidunt ut labore
et dolore magna aliquyam erat, sed diam voluptua.
</div>
如果我选择<a href="#">eirmod</a>
并调用document.getSelection().getRangeAt(0).startContainer
,我会得到对textNode的引用。如果我调用textNode.parentNode
,我会获得对周围div的引用,而不是锚标记。此行为仅发生在Edge。