javascript - getRangeAt(0) 返回带有 parentNode 文档片段的#text 节点

标签 javascript html

我正在尝试获取选定的节点。假设我选择了所有“点击编辑”。

<span style="text-transform: lowercase">CLICK TO EDIT</span>

尝试通过以下方式获取当前选择:

var select = window.getSelection();
var range = select.getRangeAt(0).cloneRange();
var selectedNode = range.cloneContents().childNodes[0];

在某些情况下,selectedNode 是包含“单击以编辑”而不是 SPAN 元素的 #text 节点。

我想要的是包含这个文本节点的跨度。但是 selectedNode.parentNode 是一个 document-fragmentselectedNode.parentElementnull

在这种情况下,我应该如何获取 span 元素?

最佳答案

此代码监听 selectionchange 事件,并获取所选文本的父元素。

document.addEventListener('selectionchange', e => {
  var selection = window.getSelection();
  var anchorNode = selection.anchorNode;
  
  if (anchorNode) {
    // This is the <span>, when you select the text
    var parentElement = anchorNode.parentElement;
    console.log(parentElement);
  }
});
<span style="text-transform: lowercase">CLICK TO EDIT</span>

关于javascript - getRangeAt(0) 返回带有 parentNode 文档片段的#text 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57256190/

相关文章:

javascript - Array.prototype.filter.call(forms, function(form) 这是在做什么?

html - 删除 ajaxtoolkit Combobox 按钮的内联样式

javascript - HTML5 拖放访问属性

javascript - 使用 javascript 检查 <ul> 中有多少 <li>

javascript - 如何使用 jQuery 将数字输入存储到变量中并执行计算以再次更新数字输入?

javascript - 如何在菜单按钮上运行不同文档中的功能

javascript - 将 HTML 表单数据保存到本地存储

javascript - 为什么我们需要像json2这样的js库来处理json?

javascript - 根据数组中的小时计算日期的出现次数

javascript - 从 AJAX 调用填充数组并将其返回到调用函数