在JavaScript中构建IntelliSense/AutoComplete

在JavaScript中构建IntelliSense/AutoComplete,javascript,autocomplete,google-chrome,intellisense,firefox-addon,Javascript,Autocomplete,Google Chrome,Intellisense,Firefox Addon,我目前为Firefox维护了一个插件,它为一个论坛网站添加了许多功能,该网站实现了自己的标记语言,类似于stackoverflow提供的“Markdown” 我已经为这个插件构建了一个IntelliSense函数,它类似于VisualStudio,在文本区域中键入这个标记时会弹出一个自动建议。例如: 实现中最困难的事情是在文本区域中找到按键的(x,y)坐标,这样我就可以在离它很近的地方弹出IntelliSense窗口。JavaScript中的按键事件不公开这些坐标,所以我不得不解决这个问题。不

我目前为Firefox维护了一个插件,它为一个论坛网站添加了许多功能,该网站实现了自己的标记语言,类似于stackoverflow提供的“Markdown”

我已经为这个插件构建了一个IntelliSense函数,它类似于VisualStudio,在文本区域中键入这个标记时会弹出一个自动建议。例如:

实现中最困难的事情是在文本区域中找到按键的(x,y)坐标,这样我就可以在离它很近的地方弹出IntelliSense窗口。JavaScript中的按键事件不公开这些坐标,所以我不得不解决这个问题。不幸的是,我只能找到一种跨浏览器兼容的方式来获取y坐标,而不是x坐标。此代码位于_getPopupPoint函数中

这适用于Firefox,因为我使用了一些Mozilla的XPCOM接口来获取坐标。因此,虽然这适用于Firefox,但现在我想将我的插件移植到Google Chrome,我找不到一种获取坐标的方法

所以我的问题有两个: (1) 有没有更好的方法来获取按键的x坐标?
(2) 如果没有,我可以在Google Chrome插件的上下文中做些什么来获取相同的数据吗?

检查的实现可能会很有趣

Dojo为事件对象提供以下属性:

  • event.target—生成事件的元素
  • event.currentTarget-当前目标
  • event.layerX-相对于event.currentTarget的x坐标
  • event.layerY-相对于event.currentTarget的y坐标
  • event.pageX-相对于视图端口的x坐标
  • event.pageY-相对于视图端口的y坐标
  • event.relatedTarget-对于onmouseover和onmouseout,鼠标指针移动到或移出的对象
  • event.charCode-对于按键事件,按键的字符代码
  • event.keyCode-对于按键事件,处理诸如ENTER和空格键之类的特殊键
  • event.charOrCode-charCode和keyCode的规范化版本,可用于直接比较alpha键和特殊键。(在1.1中添加)

您可能正在寻找的方法和相关方法。您可以使用offset etc功能计算插入符号的屏幕位置。

+1因为释放了代码,为了便于您附加图像标记!刚刚发布了图像。传递给按键事件侦听器的普通键盘事件也将具有这些属性中的大部分,但layerX/layerY和pageX/pageY属性为0。我刚刚尝试使用Dojo,属性也保持为0。这看起来接近我想要的。但是,anchorOffset和focusOffset属性在每个换行字符的开头重置为0。这意味着如果用户键入一个段落,我无法准确地找到x坐标,因为该段落在文本区域中跨越多行。