我怎样才能找到哪个字符在退格时的tinymce编辑器中被删除(在它实际被删除之前)?

时间:2011-06-15 14:57:49

标签: javascript jquery editor tinymce

假设tinymce编辑器中的光标位置在段落内。 当用户点击退格时,我需要知道哪个字符会被删除。 在删除字符之前必须知道这一点(onKeyDown没问题,onKeyUp太晚了)。

如何找出退格时删除哪个字符(在实际删除之前)?

2 个答案:

答案 0 :(得分:2)

上面的代码没有考虑段落中间的退格,也没有考虑整个选择的退格。尝试使用类似the a-tools plugin的内容(尽管还有其他几个类似的内容)与以下事件处理程序结合使用:

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));
  }
});

答案 1 :(得分:2)

在我的一个插件中,我设置了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();
  }
}