2017-08-07 66 views
0

我有一个CKEditor.I无疑要检查最后在的CKEditor:检查是否删除的最后一个元素是“BR”中的CKEditor

删除的元素

CKEditor的是BR tag.How我可以检查在CKEditor

而我正在尝试下面的方式来做到这一点。

CKEDITOR.replace('editor', { 
    allowedContent: true, 
    toolbarGroups: [ 
     { name: 'mode' }, 
     { name: 'basicstyles' } 
    ], 
    on: { 
     contentDom: function() {  


var editor = this; 

     this.editable().attachListener(editor, 'key', function(evt) { 
      // If not backspace or delete. 
      if ((evt.data.keyCode in { 8: 1, 46: 1 })) { 
      // Get selected element. 
      var lastElement = editor.elementPath().lastElement, 
       parent = lastElement.getParent(); 

       console.log(lastElement,parent); 

      console.log(lastElement.$); 
      document.getElementById("sr").innerHTML = lastElement.$.getAttribute("src") 
      } 



     }); 
    } 
    } 
}); 

Link For Fiddle

回答

0

我找到了解决方案。

使用下面的代码应该这样做..

$(CKEDITOR.instances.editor1.getSelection().getRanges()[0].startContainer.$).prev()[0].tagName 

它将给“BR”因为当你删除的BR标签在CKEDITOR输出。

0

这个问题比较复杂。您不仅可以使用backspace/delete键删除内容,还可以通过替换内容(例如选择和键入,粘贴),剪切内容或使用不同的键盘快捷键(删除上一个/下一个单词,删除行等)来删除内容。 检查删除内容需要更复杂的方法。

在你的情况,如果你想只专注于br元素,所以你想检测是否最新的修改操作去除br元素,我建议跟踪所有br元素,并检查是否所有的人都在内容修改之后呈现:

CKEDITOR.on('instanceReady', function(evt) { 
    var editable = evt.editor.editable(), 
     brs = editable.find('br'), 
     deletedBrs; 

    evt.editor.on('change', function() { 
    deletedBrs = diff(brs, editable.find('br')); 
    brs = editable.find('br'); 
    }); 
}); 

function diff(nodeList, newNodeList) { 
    // Check which elements were removed by diffing two nodeLists and return deleted elements. 
} 

这样,每次修改内容后都会有一个已删除的br元素列表。

+0

好的,但它没有给出删除的“br”位置。 –

+0

我只在用户点击退格或删除按钮时才触发此事件。 –

相关问题