我一直在努力尝试完成这项工作,并且发现很多答案都很接近但没有雪茄。这是我的情景:
我正在尝试编写一个jQuery插件,就像我的用户使用关键字和数据类型以及可能的方法的intellisense编辑器一样工作。这将感觉像IDE中的codeComplete。
我需要获取输入的部分单词,以便在我的关键字数组中进行查找,并找到要在下拉列表中填充的匹配项。事情很顺利,直到我发现了一些错误。
我有一个contentEditable DIV,需要获取光标位置。我在之前的一个回答中慷慨地提供了一些代码:
function getCursorPos() {
var cursorPos = 0;
if (window.getSelection) {
var selObj = window.getSelection();
var selRange = selObj.getRangeAt(0);
cursorPos = findNode(selObj.anchorNode.parentNode.childNodes, selObj.anchorNode) + selObj.anchorOffset; /* FIXME the following works wrong in Opera when the document is longer than 32767 chars */
//alert(cursorPos);
}
else if (document.selection) {
var range = document.selection.createRange();
var bookmark = range.getBookmark(); /* FIXME the following works wrong when the document is longer than 65535 chars */
cursorPos = bookmark.charCodeAt(2) - 11; /* Undocumented function [3] */
//alert(cursorPos);
}
return cursorPos; }
function findNode(list, node) {
for (var i = 0; i < list.length; i++) {
if (list[i] == node) {
return i;
}
}
return -1; }
我看到的问题是范围+偏移量约为7-8个字符,然后空格和其他字符似乎停止光标“进展”,然后我的整个getWord()函数被抛弃。
有没有人对我有任何启示?也许我没有使用有助于我的具体情况的代码。我花了几天时间试图了解Range和selectionRange对象,这让我疯狂。 :)