【发布时间】:2012-08-11 09:47:17
【问题描述】:
我遇到了一个可怕的问题,过去两天我一直在绞尽脑汁,但还没有想出解决方案。因此,我认为这需要比我更聪明的人来完成。
我正在尝试构建的是一个模拟 Facebook 的文本框;本质上是标记功能。
现在,如果您使用过 Facebook,您会注意到 Facebook 允许您标记评论/帖子中的人,只需输入他们的姓名并从下拉列表中进行选择。然后,您选择的人的姓名将出现在该文本区域中突出显示的文本中。我已经成功地创建并填充了 JQuery 和 AJAX 组合的下拉列表,但标记过程本身就是障碍。
选择下拉项后(通过 Enter 或单击),查询文本将替换为标记名称。现在,很难看出如何给 textarea 中的文本添加任何类型的突出显示,所以我发现(通过检查 Google Chrome 中的元素并删除 textarea 节点)textarea 本身是透明的,并且有一个白色“模拟”文本下方的 div。突出显示的单词被放置在带有自定义 CSS 的标签中,这使它具有蓝色背景。这一切都是我自己发现的,并且我已经成功模拟了这个——但我只能做一个标签。
现在我进一步调查并发现了一个输入 type="hidden" 元素,属于“mentionsHidden”类。这个 input 元素有一个 value 属性,它根据 textarea 的内容动态地填充自己。因此,如果我键入“ABC”,则元素的值将变为“ABC”。如果我包含标签,请说“嗨 [Rei]!” (其中 [] 中的名称是标签),元素的值变为“hi @[member_id:Rei]!”。
所以我已经完成了我的作业。但是我想不通的部分来了。
我不知道如何准确地用文本框的值动态填充隐藏的输入元素。很明显,给出蓝色标签背景的底层 div 是从输入元素填充的。但是输入元素让我很头疼。
你看,我不能做以下事情:
-我不能简单地“复制”当前文本区域的整个值并将其“粘贴”到输入元素的值中,因为这会覆盖输入元素中任何先前标记的人(毕竟,文本区域只能拥有明文)。
-尽管我可以找到插入符号的当前索引(textarea 中闪烁的黑线,它告诉您要在哪里输入),但这仅适用于 textarea。文本区域和输入元素值中的索引位置 10 可能是不同的东西,因为这种“标记”人的方式会导致向值字符串添加额外的字符。
-我不能简单地对要替换的文本进行“替换”,因为在值 String 的其他部分中可能存在相同文本的其他实例。
我知道这是一篇很长且令人困惑的帖子,但我希望你能明白我的意思。我真的需要一个解决方案,我不想使用 contenteditable,因为它只适用于 HTML5,一些旧版浏览器可能不支持它。
你的, 雷
【问题讨论】:
标签: javascript facebook