javascript - 从 document.getSelection() 获取多个元素

标签 javascript

如何获取用户从 document.getSelection() 中选择的多个元素?

document.getElementById("hello").onclick = function() {

  selection = document.getSelection();

  if(selection) {
     console.log(selection.anchorNode.textContent);
  }

};

http://jsbin.com/qisawudofa/edit?html,js,console,output

它似乎只返回首先选择的元素,但在我的例子中我需要获取所有元素。

或者,有没有办法至少知道何时选择了多个元素?

最佳答案

您可能对 Ranges 最感兴趣组成选择。请记住,用户可以在整个页面上进行多项选择。选择的每个连续区域将获得其自己的 Range 实例。

您需要遍历所有范围。对于它们中的每一个,您都可以看到它的开始位置和结束位置:

if (selection) {
    for (i=0; i<selection.rangeCount; i++)  {
        range = selection.getRangeAt(i);
        if (range) {
            console.log(range.startContainer);
            console.log(range.endContainer);
        }
    }
}

但是对于代码中描述的示例,您还需要考虑两件事:

  1. 只有当用户非常准确地选择一个段落时,您才会在startContainer 中获取该段落的节点。他们可能会在段落开始后甚至一个字符开始他们的开始选择,然后您将获得一个以该段落为父节点的文本节点。

  2. Range 只为您提供该范围选择的开始和结束。它不会直接为您提供介于两者之间的所有元素。因此,如果用户选择了 2 个以上的段落,您将需要自己弄清楚哪些段落位于开始和结束之间。

关于javascript - 从 document.getSelection() 获取多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33856579/

相关文章:

javascript - 有条件地加载外部脚本不起作用,没有错误

为所有链接添加行为的 JavaScript 应该排除一些

javascript - 从 Chrome 扩展程序注入(inject)的脚本是否可以访问页面上的 javascript (angularjs)?

javascript - 通过存储在变量中的名称访问对象

javascript - 没有flux的同构react.js

Javascript 前瞻问题!

javascript - 未知插件 "transform-decorators-legacy"在windows中使用react storybook时报错

javascript - WordPress wp_enqueue_scripts() 触发 500 内部服务器错误

javascript - 如何将图中绘制的最低点的点颜色更改为红色,第二个问题是 ie10、ie8 不支持动画效果

javascript - 删除空格但在文本区域中保留换行符 JS 或 jQuery