Javascript 如何获取window.getSelection()的范围对象?

Javascript 如何获取window.getSelection()的范围对象?,javascript,jquery,range,Javascript,Jquery,Range,在js函数中,我希望在用户选择内容后,获得作为网页内容一部分的所有NodeHTML元素 现在,我知道window.getSelection将给我一个选择对象。此外,必须将此选择对象转换为范围对象,然后才能获得作为该选择一部分的NodeHTML元素列表 如何获取范围对象?从我所读到的,不同的浏览器有不同的范围对象的实现…最初,我将只在Google Chrome中使用这个js函数…所以代码应该在Google Chrome中完美工作。。。但我确实希望该代码能在所有/大多数新版本的Google Chro

在js函数中,我希望在用户选择内容后,获得作为网页内容一部分的所有NodeHTML元素

现在,我知道window.getSelection将给我一个选择对象。此外,必须将此选择对象转换为范围对象,然后才能获得作为该选择一部分的NodeHTML元素列表

如何获取范围对象?从我所读到的,不同的浏览器有不同的范围对象的实现…最初,我将只在Google Chrome中使用这个js函数…所以代码应该在Google Chrome中完美工作。。。但我确实希望该代码能在所有/大多数新版本的Google Chrome上运行。。。代码可以是JS或纯Jquery


还有一个问题——我是否必须使用像Rangy这样的js库——用于此目的?或者这可以通过使用纯js或jquery代码实现吗?

我可以看出,您面临的问题不是获取范围对象,而是在选择中查找HTML节点。在中,如果选择文本并单击“获取选择html”按钮,则将获得所选文本,包括DOM。一旦获得了这些,就可以使用jquery代码找到DOM节点列表。如果你需要更多的信息,请告诉我

除了IE<9之外,所有主要的浏览器在选择和范围上都采用了相同的标准,并且已经使用了多年。虽然存在一些差异,但API是相同的。如果你对IE<9不感兴趣,那么你真的不需要使用Rangy,它在gzip之前大约有40KB,尽管它确实有一种方便的方法来获取节点,你可能会觉得很有用

要获取选定范围内的节点,可以按如下方式获取选定范围:

var sel = window.getSelection();
if (sel.rangeCount > 0) {
    var range = sel.getRangeAt(0);
}
要从范围中获取节点,可以使用中的代码。如果你用朗吉,它会

var sel = rangy.getSelection();
if (sel.rangeCount > 0) {
    var range = sel.getRangeAt(0);
    var nodes = range.getNodes();
}

看一看。这可能会有所帮助。如果选择在一些顶级html节点中,那么在您提供的演示中,我是否也会使用选择的html获取顶级节点?基本上,我需要整个节点路径,从顶层节点向下,用于当前选择。。。演示还将与包括图像/链接/表格的选择一起使用吗?谢谢