Javascript 获取除不可选择元素之外的选定文本

Javascript 获取除不可选择元素之外的选定文本,javascript,jquery,html,css,selection,Javascript,Jquery,Html,Css,Selection,我试图在一篇文章中为选择的开始和结束获取字符偏移量。但是,我希望在此过程中忽略一些元素 在我的应用程序中,在JS动态注入一些元素之前,服务器正在处理HTML,并且文本中的字符数在服务器和客户端之间保持一致非常重要 我希望它能简单到和你一样。遗憾的是,尽管文本看起来不是选中的,但它仍然包含在选中的范围内 我在下面写了一个简短的例子。我曾经尝试过将removeFromSelection作为一种变通方法,但没有太大成功。也许我需要删除重叠的范围。不可选择并手动用全新的范围对象填充空白。我觉得这应该比我

我试图在一篇文章中为选择的开始和结束获取字符偏移量。但是,我希望在此过程中忽略一些元素

在我的应用程序中,在JS动态注入一些元素之前,服务器正在处理HTML,并且文本中的字符数在服务器和客户端之间保持一致非常重要

我希望它能简单到和你一样。遗憾的是,尽管文本看起来不是选中的,但它仍然包含在选中的范围内

我在下面写了一个简短的例子。我曾经尝试过将removeFromSelection作为一种变通方法,但没有太大成功。也许我需要删除重叠的范围。不可选择并手动用全新的范围对象填充空白。我觉得这应该比我做的容易。我应该怎么做

函数findancestorofsetcontainer、节点、偏移量 { 如果节点==容器 返回偏移量; var parent=node.parentNode; var syblings=parent.childNodes; 对于变量i=0,len=syblings.length;i

这不可能。

而这又可以。

输出 从:,到:
这不是一个完整的解决方案,但这只是一个开始。其思想是迭代每个段落元素,如果它不可选择,则将其从选择中删除。我将所选内容转换为一个字符数组,并在开始处填充它,以便索引与整个文档中的索引相匹配

我没有注意最后的to和from值,它们可能不正确-但更重要的是,如果选择整个文本,您可以看到它在第二个不可选择的块上被关闭了几个字符。我没时间去摆弄它了,但也许其他人可以从我停下来的地方接过来

函数findancestorofsetcontainer、节点、偏移量 { 如果节点==容器 返回偏移量; var parent=node.parentNode; var syblings=parent.childNodes; 对于变量i=0,len=syblings.length;i{ var元素=$rawElement; var sectionStart=i; var lengthOfSection=element.text.length; ifelement.hasClass“不可选择”{ textArray.splicatesectionstart,lengthofssection; }否则{ i+=长度截面; } }; var text=textArray.join; $'from'.textfrom; $'to'.textto; $'out'.texttext; } $'.article'.mouseuponSelect; $'.article'.focusoutonSelect; .不可选择{ -webkit触摸标注:无; -webkit用户选择:无; -khtml用户选择:无; -moz用户选择:无; -ms用户选择:无; 用户选择:无; } 预科{ 边框:实心1px黑色; 填充:12px; } 选择这个 这是可以选择的。

这不可能。

而这又可以。

这是可以选择的。

这不可能。

而这又可以。

输出 从:,到:
你应该得到选中的HTML:然后你可以过滤掉它,例如:但是这需要更多的测试,因为我认为这可能是错误的