Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在退格的tinymce编辑器中找出哪个字符被删除(在它实际被删除之前)?_Javascript_Jquery_Editor_Tinymce - Fatal编程技术网

Javascript 如何在退格的tinymce编辑器中找出哪个字符被删除(在它实际被删除之前)?

Javascript 如何在退格的tinymce编辑器中找出哪个字符被删除(在它实际被删除之前)?,javascript,jquery,editor,tinymce,Javascript,Jquery,Editor,Tinymce,假设tinymce编辑器中的光标位置位于段落内。 当用户点击backspace时,我需要知道哪个字符将被删除。 在移除角色之前必须知道这一点(onKeyDown是可以的,onkeydup太晚了) 我如何知道哪一个字符在退格前被删除(实际上它被删除)?强> < p>上面的代码没有考虑段落中段的反间距,也不考虑整个选择的后退。结合以下事件处理程序尝试类似的操作(尽管还有其他类似的操作): jQuery('input, textarea').keydown(function(e) { if(e

假设tinymce编辑器中的光标位置位于段落内。 当用户点击backspace时,我需要知道哪个字符将被删除。 在移除角色之前必须知道这一点(onKeyDown是可以的,onkeydup太晚了)


<强>我如何知道哪一个字符在退格前被删除(实际上它被删除)?<>强>

< p>上面的代码没有考虑段落中段的反间距,也不考虑整个选择的后退。结合以下事件处理程序尝试类似的操作(尽管还有其他类似的操作):

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

<>上面的代码没有考虑段落中间的反间距,也不考虑整个选择的反间距。结合以下事件处理程序尝试类似的操作(尽管还有其他类似的操作):

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

在我的一个插件中,我设置了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();
  }
}
ed.onKeyDown.add(函数(ed,evt){
if(段落&&evt.keyCode==8&&ed.selection.isCollapsed()){
//插入特殊标记字符
var值='\u2060';
setContent(值,{format:'raw',no_事件:1});
//节点是插入符号所在的dom节点
var node=ed.selection.getNode();
var node_content=$(node.text();
var position=node_content.search('\u2060');
//这就是角色
var char\u vor\u cursor=position!=0?节点内容切片(position-1,position):“”;
//软连字符测试
if(char\u vor\u cursor!=''&&char\u vor\u cursor.charCodeAt(0)==173){
//正确的innerHTML
_backspace后面的var text_=节点内容.slice(0,位置-1)+'\u2060'+节点内容.slice(位置+1);
node.innerHTML=退格后的文本;
}
var caret_node=$(node.find('#u ircaret').get(0);
//选择caretnode并删除
ed.selection.select(插入符号节点);
$(ed.getBody()).find('.ircaret').remove();
}
}

在我的一个插件中,我设置了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();
  }
}
ed.onKeyDown.add(函数(ed,evt){
if(段落&&evt.keyCode==8&&ed.selection.isCollapsed()){
//插入特殊标记字符
var值='\u2060';
setContent(值,{format:'raw',no_事件:1});
//节点是插入符号所在的dom节点
var node=ed.selection.getNode();
var node_content=$(node.text();
var position=node_content.search('\u2060');
//这就是角色
var char\u vor\u cursor=position!=0?节点内容切片(position-1,position):“”;
//软连字符测试
if(char\u vor\u cursor!=''&&char\u vor\u cursor.charCodeAt(0)==173){
//正确的innerHTML
_backspace后面的var text_=节点内容.slice(0,位置-1)+'\u2060'+节点内容.slice(位置+1);
node.innerHTML=退格后的文本;
}
var caret_node=$(node.find('#u ircaret').get(0);
//选择caretnode并删除
ed.selection.select(插入符号节点);
$(ed.getBody()).find('.ircaret').remove();
}
}


我没有输入元素或文本区域,但有一个内容可编辑的iframe,但我会尝试一下,如果这段代码适用,这在我使用“$(ed.getDoc())”时是没有定义的。keydown(函数(e){…(ed.getDoc返回iframes文档)我现在没有时间写一些代码,但是你有没有尝试过查看
tinyMCE.get('foo')).selection
property?
foo
是您的编辑器的名称。是的,我熟悉tinymce选择。这里的问题是,我无法为我在Startup上的编辑器中创建的每个段落分配事件处理程序。我没有输入元素或文本区域,但有一个内容可编辑的iframe,但如果适用此代码,我将尝试当我使用“$(ed.getDoc()).keydown(函数(e){…”(ed.getDoc返回iframes文档)时,这是没有定义的。我现在没有时间写一些代码,但是您是否尝试过查看
tinyMCE.get('foo')).selection
property?
foo
是您编辑器的名称。是的,我熟悉tinymce选择。这里的问题是,我无法为我在Startup编辑器中创建的每个段落分配事件处理程序。我想知道您为什么要这样做?可能有更好的解决方案。我们有不可见的软连字符在编辑器文本中,当用户按下退格键时,我需要确定这些软连字符中的一个是否会被删除,以便确定是否有必要删除一个附加字符,否则用户将看不到按下退格键将删除任何内容(即使是这样,但要删除的软连字符不可见)我想知道您为什么要这样做?可能有更好的解决方案。我们在编辑器文本中有不可见的软连字符,当用户按backspace时,我需要确定这些软连字符中是否有一个将被删除,以便确定是否有必要删除一个额外的字符,否则用户将看不到按backspacepace将删除任何内容(即使它删除了,但要删除的软连字符不可见)var
节点是什么?@JoelWorsham:sorry.node=ed.selection.getNode();我可以获取位置和字符,但无法删除它们。为什么?获取它:char\u vor\u cursor.charCodeAt(0)=173:)var
节点是什么?@JoelWorsham:sorry.node=ed.selection.getNode();我可以获取位置和字符,但无法删除它们。为什么?获取:char\u vor\u cursor.charCodeAt(0)==173:)