一个前端问题:@人功能

2013-08-23 21:54:59 +08:00
 scarlex
我觉得@人功能最核心的地方就是获取光标位置,所以我现在的做法是watch光标位置,然后判断光标左边的字符是不是'@',如果是的话就根据光标位置把textarea里面的字符分成两部分,再获取用户输入的字符,筛选数据。最后把'@'前面的内容,筛选的用户,'@'后面的内容这三部分拼接起来。

我按照这样的思路把功能做出来了,但在写单元测试(jasmine)的时候遇到了个问题。
textarea.focus().val('12345');
console.log(textarea[0].selectionStart)
我用这样的语句,也找过其他设置光标位置的方法,但光标位置总是返回0,这样写不了测试。。

是不是我这种方法不好写测试?
有木有其他思路?

顺便说下,获取光标位置我是用了caret.js。
3178 次点击
所在节点    问与答
7 条回复
ksc010
2013-08-23 22:00:14 +08:00
或者直接监听按键事件
chloerei
2013-08-23 22:31:36 +08:00
用 contenteditable 做编辑区会不会好做点,Twitter 是这样的。
Perry
2013-08-23 22:45:41 +08:00
获取光标位置,可以参考:
Caret.js: https://github.com/ichord/Caret.js
At.js: https://github.com/ichord/At.js
scarlex
2013-08-23 22:59:59 +08:00
@ksc010 直接监听按键事件?@人列表出现的位置是根据光标的吧?其实最后还是要获取光标位置吧?

@chloerei 有木有具体点的做法!?

@Perry Caret.js被我改写来用了,At.js有些地方没看懂@_@
kfll
2013-08-23 23:12:37 +08:00
chloerei
2013-08-24 00:20:46 +08:00
有个现成的满足需要不? https://github.com/ichord/At.js
scarlex
2013-08-24 00:31:13 +08:00
@chloerei 不能,我们项目很快要把jquery的依赖去除,这个只能当做参考。
At.js的核心部件caret.js被我改写成angular的module来用。我目前获取光标就是通过他的方法来实现的。
我目前的做法最大的问题是写测试比较困难。。

@kfll 我去看看你这个 : -D

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/80034

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX