2013-10-27 2 views
0

Я пишу редактор веб-кода, где каждая строка представляет собой редактируемый контент div. Я написал собственный метод для установки позиции каретки по заданному индексу, но он работает только в хроме. opera и firefox всегда ставят каретку на начало линии.GWT set position on content editable 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 и он работает в хром, далее и оперы.

Неправильная функция или что-то в генерации кода gwt с изменением каретки?

EDIT: им с помощью TreeWalker, потому что я хочу, чтобы обрабатывать текст hightlighting путем оборачивания текста в пролетных узлов в будущем

EDIT2: хорошо, ив нашел проблему самостоятельно.

var range = document.createRange(); var sel = window.getSelection();

эти строки были неправильными. js-код в gwt находится в iframe, поэтому для доступа к моим элементам html мне пришлось использовать что-то вроде этого var range = $ doc.createRange(); var sel = $ doc.getSelection(); порога $ док переменная устанавливается GWT

+1

Пожалуйста, ответ на ваш вопрос с вашим решением и принять его. – Fedy2

ответ

1

правильное использование документов и оконных объектов в родном методе GWT заключается в использовании $ WND и $ док, которые установлены на рамках GWT

+0

Можете ли вы предоставить свое решение для этого? Я пытаюсь получить/установить позицию каретки внутри контейнера 'contenteditable'. – displayname