我想使用jQuery为facebook状态更新创建一个类似的系统。
如果你看看它的内容,只是What's on your mind?
textarea标签下面的几个元素,就会有一个隐藏的字段......
<input type="hidden" autocomplete="off" class="mentionsHidden" name="xhpc_message" value="">
当您在textarea字段中键入状态时,此隐藏字段的值会更改以匹配状态。但是,如果您将某人标记为状态,则隐藏字段会显示@[uid:User Name]
之类的内容,而不是用户名,以便稍后可以将其转换为超链接。
我试图重建类似的东西,不是用户,而是用标签。 http://jsfiddle.net/nickjackson/qh3QP/
当我在第一个文本区域字段中输入#fun
时,第二个文本区域显示#[tag:fun]
,#fun
标记变为fun
。这都是正确的。但是,当我输入其他内容时,方括号会消失,因为#标记不再位于状态字段中。我该如何解决这个问题?
最终,如何创建textarea和隐藏字段组合,其功能与facebook状态更新类似,并允许使用标记?
答案 0 :(得分:1)
我使用了3个字段 - 一个用于输入,一个用于存储tag
内容,另一个用于显示文本。输入字段是不可见的,但在显示字段的顶部。这应该是不言自明的,但是问你可能有的任何问题 - 不,我没有没有光标的快速解决方案。
答案 1 :(得分:0)
正如Henry Garle所述,hidden-field
中一次不能有多个编码标签,(除非您在status-field
中粘贴包含多个标签的文本),因为代码需要在status-field
中查找标记,以便在hidden-field
中创建它们的编码版本。由于它在执行此操作后仅在status-field
中保留标记的值,因此下次代码运行时(在按键事件之后),它会将所述值视为常规文本,它只是复制到{{ 1}},因为它无法将它们识别为标签的值。
修复很简单:因为大概一次只能创建一个标记,所以您只需修改代码,只针对hidden-field
中第一个显示的标记。由于不会定位其他标记,因此将保留status-field
中的编码版本。
然而,在实现该修复之前,您应该考虑为每个包含其值和位置数据的标记维护一个对象。这种方法将标签的内部和外部表示分开,允许更快地定位标签,并为标签的最终格式化提供更大的灵活性。
Mentionator是一个现有的强大解决方案,它采用这种方法提供您尝试重新创建的功能。考虑到它结构合理,易于理解和大量评论,它应该对您有用,既可以作为开箱即用的解决方案,也可以在您推出自己的引用材料时引用。它由你真正维护:)。