2014-02-12 3 views
0

Я пытаюсь найти позицию каретки в редактируемом div. Также должно быть приятно получить выделенный текст в этом div.позиция каретки в редактируемом div (dartlang)

Я стараюсь усвоить это: Editable Div Caret Position

Но работа dosen't.

Буду рад предоставить любую Идею.

Заранее спасибо

Некоторые фрагмент кода

HTML

<a on-click="{{chooseMenu}}" which-menu="1">Menu 1</a> 

Dart

void chooseMenu(Event event, var detail, var target) { 

    event.preventDefault(); 
    event.stopPropagation(); 

    Selection sel; 
    Range range; 

    sel = window.getSelection(); 

    if(sel != null) { 
     range = sel.getRangeAt(0); 
     range.collapse(false); 
    } 

    currentSubMenu = int.parse(target.attributes['which-menu']); 
    } 
+0

Можете ли вы добавить свой код на свой вопрос. Что такое «не работает»? –

ответ

0

Это работало для меня в Дартиуме.

Другой код из упомянутого вопроса SO, вероятно, предназначен для поддержки других браузеров. Dart обычно генерирует JS-код, который работает во всех поддерживаемых браузерах. Вам нужно проверить себя, если сгенерированный JS действительно работает в браузерах, которые вы хотите поддержать.

EDIT

Мы сохраняем выбор всякий раз, когда она меняется. Может быть, есть лучшие события, но я не смог их найти. Но это сработало для меня. Вставляем новый узел в ранее сохраненный выбор.

// must be accessible by getRange, insertNodeAfterSelection 
DivElement editable; 
Range range; 

// store reference to our contenteditable element 
editable = (document.querySelector('#editable') as DivElement); 

// subscribe selection change events 
document.onSelectionChange.listen(getRange); 


void insertNodeAfterSelection(Node node) { 
    range.collapse(false); 
    range.insertNode(node); 
} 

void getRange(Event e) { 
    if(document.activeElement != editable) { // save only selection changes on our contenteditable 
    return; 
    } 
    print(e); 
    Selection sel; 

    sel = window.getSelection(); 
    if(sel != null) { 
    range = sel.getRangeAt(0); 
    } 
} 

Вы должны сами решить, где разместить эти части кода. Я добавил некоторые комментарии в качестве поддержки.

EDIT
используя событие MouseDown вместо мыши должен помочь обойти эту проблему
Preserve text selection in contenteditable while interacting with jQuery UI Dialog and text input

+0

Да, вы правы. Это работает. Только для кнопки нажмите. Но. Я сам себя не понял. У меня возникла проблема, когда я нажимаю любой другой элемент. =>

Hit me
Потому что фокус ушел. – Frank

+0

Вы пытались вызвать 'e.preventDefault();' и 'e.stopPropagation();' внутри вашего 'doSomething()' это должно отменить потерю фокуса? –

+0

Теперь да. Но это не сработает. – Frank

Смежные вопросы