Что лучший способ состоит в том, чтобы установить курсор/позицию курсора?

Вы по существу просите полный механизм визуализации, доступный Java. Лично, я сохранил бы меня стычка и обратился бы к дочернему процессу.

Иначе, я столкнулся с этим чистым браузером Java: Lobo

31
задан Daniel Bachhuber 12 August 2009 в 15:03
поделиться

3 ответа

​​

Потратив более 15 часов на эту проблему (я знаю, самоотверженность), я нашел частичное решение, которое работает в FF и Safari, но не в IE. На данный момент для меня этого достаточно, хотя я мог бы продолжить работу над этим в будущем.

Решение: при вставке HTML в текущую позицию курсора лучше всего использовать функцию:

tinyMCE.activeEditor. selection.setContent (htmlcontent);

В Firefox и Safari эта функция вставит контент в текущую позицию курсора в iframe, который WordPress использует в качестве редактора TinyMCE. Проблема с IE 7 и 8 заключается в том, что функция, кажется, добавляет контент в верхнюю часть страницы, а не iframe (т.е. полностью пропускает текстовый редактор). Чтобы решить эту проблему, Я добавил условный оператор , основанный на этом коде , который будет использовать эту функцию вместо IE:

tinyMCE.activeEditor.execCommand ("mceInsertRawHTML", false, htmlcontent);

Проблема для этой секунды функция, однако, заключается в том, что позиция курсора устанавливается в начало области публикации после того, как она была вызвана (без надежды на ее вызов, исходя из диапазона браузера и т. д.). Где-то ближе к концу я обнаружил, что эта функция восстанавливает положение курсора в конце вставленного содержимого с помощью первой функции:

tinyMCE.activeEditor.focus ();

Кроме того, он восстанавливает положение курсора до конец вставленного содержимого без необходимости вычислять длину вставленного текста. Обратной стороной является то, что он работает только с первой функцией вставки, которая, кажется, вызывает проблемы в IE 7 и IE 8 (что может быть скорее ошибкой WordPress, чем TinyMCE).

Я знаю многословный ответ. Не стесняйтесь задавать вопросы для уточнения.

25
ответ дан 27 November 2019 в 21:40
поделиться

Я заимствовал это из здесь .

function setCaretTo(obj, pos) { 
    if(obj.createTextRange) { 
        /* Create a TextRange, set the internal pointer to
           a specified position and show the cursor at this
           position
        */ 
        var range = obj.createTextRange(); 
        range.move("character", pos); 
        range.select(); 
    } else if(obj.selectionStart) { 
        /* Gecko is a little bit shorter on that. Simply
           focus the element and set the selection to a
           specified position
        */ 
        obj.focus(); 
        obj.setSelectionRange(pos, pos); 
    } 
} 
1
ответ дан 27 November 2019 в 21:40
поделиться

Первое, что вам нужно сделать, это добавить диапазон в конце содержимого, которое вы хотите создать.

var ed = tinyMCE.activeEditor;

//add an empty span with a unique id
var endId = tinymce.DOM.uniqueId();
ed.dom.add(ed.getBody(), 'span', {'id': endId}, '');

//select that span
var newNode = ed.dom.select('span#' + endId);
ed.selection.select(newNode[0]);

Это стратегия, которую использовали сами разработчики TinyMCE при написании Selection.js. Чтение основного источника может быть очень полезным для такого рода проблем.

27
ответ дан 27 November 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: