summernote或任何RTE中的制表符行为

时间:2014-12-01 20:57:50

标签: jquery contenteditable rich-text-editor summernote

我使用的是summernote富文本编辑器,下面是我的要求

编辑器是一个包含大量字段的长格式的一部分

  • 当在编辑器内部时,如果我按TAB键,而不是缩进,我想转到下一个字段(通常的TAB行为)
  • 在编辑器内部,如果按CTRL + TAB键,我想添加缩进。

即使其自定义功能确实建议

2 个答案:

答案 0 :(得分:0)

您可以将以下答案的各个方面结合起来:

这是一个例子。它使用 Shift - Tab 而不是 Ctrl - Tab ,因为浏览器似乎阻止覆盖默认值 Ctrl - Tab beahviour(至少在Mac上的Chrome中)。它应该适用于所有主流浏览器,包括旧的IE回到版本6.



function insertTextAtCursor(text) {
  var sel, range, html;
  if (window.getSelection) {
    sel = window.getSelection();
    if (sel.getRangeAt && sel.rangeCount) {
      range = sel.getRangeAt(0);
      range.deleteContents();
      var textNode = document.createTextNode(text);
      range.insertNode(textNode);
      
      /* Move the caret to be immediately after the inserted text */
      range.setStartAfter(textNode);
      range.collapse(true);
      sel.removeAllRanges();
      sel.addRange(range);
    }
  } else if (document.selection && document.selection.createRange) {
    document.selection.createRange().text = text;
  }
}

function allowShiftTabChar(el) {
  $(el).keydown(function(e) {
    if (e.which == 9 && e.shiftKey) {
      insertTextAtCursor("\t");
      e.preventDefault();
      e.stopPropagation();
    }
  });

  /* For old Opera, which only allows suppression of keypress events, not keydown */
  $(el).keypress(function(e) {
    if (e.which == 9 && e.shiftKey) {
      e.preventDefault();
      e.stopPropagation();
    }
  });
}

$(document).ready(function() {
  allowShiftTabChar( $("#editor")[0] );
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<pre contenteditable="true" id="editor">
This is editable
Try press tab somewhere
</pre>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

实际上它很简单。我刚刚在summernote.js中禁用了tab和shift + tab键的代码:)