Javascript 有没有办法通过多个元素选择文本?

Javascript 有没有办法通过多个元素选择文本?,javascript,html,Javascript,Html,var range=document.createRange(); var root_node=document.getElementById(“测试”); //从'hello'元素开始。 range.setStart(root_node.childNodes[0],2); //在“world”节点结束 range.setEnd(root_node.childNodes[1],2); 范围。选择节点内容(根节点); 让sel=window.getSelection(); 选择removeAllR

var range=document.createRange();
var root_node=document.getElementById(“测试”);
//从'hello'元素开始。
range.setStart(root_node.childNodes[0],2);
//在“world”节点结束
range.setEnd(root_node.childNodes[1],2);
范围。选择节点内容(根节点);
让sel=window.getSelection();
选择removeAllRanges();
选择添加范围(范围)

世界

您调用了
setStart
两次,而不是
setStart
后接
setEnd
,并且在每种情况下都指定了2的偏移量,但我认为您不需要偏移量,因为这样会使节点索引超出范围(并引发错误)

var range=document.createRange();
var root_node=document.getElementById(“测试”);
//从'hello'元素开始。
range.setStart(root_node.childNodes[0],0);
//在“world”节点结束
range.setEnd(root_node.childNodes[1],0);
范围。选择节点内容(根节点);
让sel=window.getSelection();
选择removeAllRanges();
选择添加范围(范围)

世界

@Matt answer的方向是正确的,但没有达到OP想要的,即跨越多个元素(节点)的范围,同时在这些元素中使用偏移量

实现这一目标的途径如下:

var range=document.createRange();
var root_node=document.getElementById(“测试”);
range.setStart(root_node.querySelector('a')。firstChild,2);
range.setEnd(root_node.querySelector('span')。firstChild,3);
var sel=window.getSelection();
选择removeAllRanges();
选择添加范围(范围)

世界

2是故意存在的。我的意思是从第一个元素的第二个字母开始选择,在下一个元素的第二个字母结束选择。我明白了,只有当节点是TextNode时,这才有效,否则偏移量就是节点偏移量(参见)。啊。我懂了。。。看起来我将添加一个覆盖,这样我可以将文本放入其中,然后选择其中的文本,而不是包含所有span/a元素的div。谢谢你的帮助。我不知道你不能在实际元素中使用文本节点。。。