Как я могу узнать, какой персонаж был удален в редакторе tinymce на backspace (до того, как он действительно будет удален)? - PullRequest
1 голос
/ 15 июня 2011

Предполагая, что позиция курсора в редакторе tinymce находится внутри абзаца. Когда пользователь нажимает клавишу Backspace, мне нужно знать, какой персонаж будет удален. Это необходимо знать до того, как персонаж будет удален (onKeyDown в порядке, onKeyUp слишком поздно).

Как я могу узнать, какой персонаж удаляется на забой (до того, как он действительно будет удален)?

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

в одном из моих плагинов я установил onKeyDown

ed.onKeyDown.add(function(ed, evt) {
  if (paragraph && evt.keyCode == 8 && ed.selection.isCollapsed()) {

        //insert special marker char
    var value = '<span id="__ircaret" class="ircaret">\u2060</span>';
    ed.selection.setContent(value, {format : 'raw', no_events: 1});

    // node is the dom node the caret is placed in
    var node = ed.selection.getNode();
    var node_content = $(node).text();

    var position = node_content.search('\u2060');

        // this is the character
    var char_vor_cursor = position != 0 ? node_content.slice(position - 1, position) : '';

    // Test for soft-hyphen
    if (char_vor_cursor != '' && char_vor_cursor.charCodeAt(0) == 173) {
        // correct innerHTML
                var text_after_backspace = node_content.slice(0, position - 1) + '<span id="__ircaret" class="ircaret">\u2060</span>' +  node_content.slice(position + 1);
        node.innerHTML = text_after_backspace;
    }
    var caret_node = $(node).find('#__ircaret').get(0);

    // select caretnode and remove
    ed.selection.select(caret_node);
    $(ed.getBody()).find('.ircaret').remove();
  }
}
2 голосов
/ 15 июня 2011

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

jQuery('input, textarea').keydown(function(e) {
  if(e.keyCode === 8) {
    var selection = jQuery(this).getSelection();
    var selStart  = (selection.length) ? selection.start : selection.start - 1;
    var selEnd    = selection.end;
    alert(jQuery(this).val().slice(selStart, selEnd));
  }
});
...