【发布时间】:2009-12-17 08:22:22
【问题描述】:
我正在开发基于 textarea 的自定义标记字段。这个想法是有一个文本区域,其中 div 元素绝对位于上方,所以它看起来就像它们在文本区域中。
到目前为止,我很痛苦,但我几乎什么都做了,除了一件事。
甚至可以在 javascript 中设置反向选择吗?当您将光标放在 textarea 中间的某处时,按住 shift 并按几次左箭头,您将获得一个选择。棘手的部分是它不常见 - 它是向后的(它的开始是从结尾向右,不像通常那样)。我的文本区域中有占位符,我在上面显示我的 div(令牌)。当您导航到其中一个时,光标会跳到占位符的另一边,因此感觉很自然。当您按住 shift 并到达占位符时,它会跳到右侧,并设置一个新的选择,因此看起来您选择了标记(您可以按删除,并使用标记本身删除所选范围,这很酷) .但是,如果您从右到左导航,它可能不会起作用,因为设置一个新的选择会使其无法恢复:
从左到右选择:
abcde[start]efg[end](token)
[shift]+[right]
abcde[start]efg(token)[end]
[del]
abcde
从右到左选择
(token)[end]efg[start]abcde
[shift]+[left]
[start](token)abcdeefg[end] //see? it's back to normal
[shift]+[left]
[start](token)abcdeef[end]g //huh?! shift-right moves end point (unexpected)
abcde
所以这里有一个问题:我可以在 textarea 中设置起点大于终点的选择吗?只是element.setSelectionRange(right, left) 在 Firefox 中不起作用,还有其他想法吗?
【问题讨论】:
-
这很有趣,我可以得到一个链接还是超级机密的 NASA 东西? :)
-
它仍在进行中的小部件。但是当我确定它完成时,我可能会释放它(它是 mootools)。这是一张图片,让您了解它是如何工作的:img.skitch.com/20091217-89kmqxu8subd5xr8yn1ut7953b.png(它会嗅探所有类型的事件并尝试在隐藏的 div 中呈现它,然后计算标记的位置并重新定位 textarea 上方的东西)它实际上是一个克隆Mac OS X 中 Mail.app 中的令牌字段。非常接近克隆 :)
-
请发布它,学习它会非常有趣:)
标签: javascript textarea selection