2013-10-27 85 views
0

我正在写一个基于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

设置一个变量
+1

请与您的解决方案回答你的问题并接受它。 – Fedy2

回答

1
在GWT本地方法

正确使用文件和窗口对象是使用$ WND和由GWT框架设置$ DOC

+0

你能为此提供解决方案吗?我尝试在'contenteditable'容器内设置/设置插入符号的位置。 – displayname