我正在写一个基于Web的代码编辑器,其中每行是一个内容编辑DIV插入位置。 我写了一个本地方法要在一个给定的索引插入符的位置,但它只能在Chrome中。歌剧和firefox总是设置插入行的插入符号。GWT设置内容编辑DIV
public native void setCursorPos(int index) /*-{
//console.log(index);
var that = [email protected]::getElement()();
var position = index;
var el = that;
var treeWalker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT,
function(el) {
return NodeFilter.FILTER_ACCEPT;
}, false);
while (treeWalker.nextNode()) {
if (position - treeWalker.currentNode.length <= 0) {
var range = document.createRange();
var sel = window.getSelection();
console.log(position);
range.setStart(treeWalker.currentNode, position);
range.setEnd(treeWalker.currentNode, position);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
el.focus();
return;
} else {
position = position - treeWalker.currentNode.length;
}
}
同时测试代码,我就是用这个http://jsbin.com/EcETajo/5/edit 并在铬,FF和歌剧作品。
是函数错了或什么的GWT生成的代码改变插入位置?
编辑:使用treewalker,因为我想在未来的
EDIT2包裹在跨节点的文本处理文本hightlighting IM:OK,我已经通过我发现了一个问题。
变种范围= document.createRange(); var sel = window.getSelection();
这些线路是错误的。在GWT的js代码是在iframe中,所以要访问我的HTML元素,我不得不使用这样的事情 变种范围= $ doc.createRange(); var sel = $ doc.getSelection(); wher $文档是由GWT
设置一个变量
请与您的解决方案回答你的问题并接受它。 – Fedy2