【发布时间】:2013-07-08 03:04:15
【问题描述】:
我正在尝试使用 DOM 元素创建自己的文本选择。是的,我的意思是当你在这个元素中选择它时你在文本后面看到的蓝色背景。这个想法是停止默认行为(蓝色)并使用我自己的元素通过找到选择的 xy 位置然后放置绝对定位的元素来完成这项工作。我希望能够使用普通的div 来做到这一点。
我想我需要 3 个元素。一个用于顶行(可能不完整),一个用于中间块,一个用于最后一行(与顶部相同)。这是一张可以帮助您理解的图像:
我一直在考虑捕捉mouseup/down,然后是mousemove,然后检查window.getSelection(),但到目前为止我无法到达任何地方。
使用 CSS ::selection 将不起作用,因为该元素将没有焦点。
感谢我能得到的所有帮助!提前致谢。
编辑: 偶然发现https://code.google.com/p/rangy/ 可能有帮助?有使用过这个插件的人吗?
编辑2: 需要跨浏览器支持。
【问题讨论】:
-
我不确定您是否可以在不禁用功能的情况下阻止文本突出显示。 `user-select' 可让您阻止选择某个区域,但这意味着您将无法进行剪切和粘贴。另一个问题是性能。使用 javascript 来呈现高亮将比浏览器/操作系统本身执行的字母要慢得多。
-
@IsaacSuttell:你不能抓住
onselect并阻止默认操作吗?我会这么认为。但这也可能会杀死window.getSelection()功能。我不认为会有巨大的性能影响,它只是三个要素。 Codemirror 似乎处理得很好,但我不知道如何。 -
@IsaacSuttell:是的,也读一下。该死。如果您想伸出援助之手,请查看此内容:jsfiddle.net/XjHtG/9
-
如果您阻止默认行为,用户将无法复制文本,这是您想要的吗?
标签: javascript html textselection