7

在 chrome 中的 contenteditable 中按 enter 时,会插入一个 div。这干扰了我的标记,我需要它是一个 br。

我知道 shift-enter 是一个 br。解决问题的最佳方法是什么?

谢谢。

重新提出问题:当有人按下回车键时如何触发 shift-enter?

我试过写这样的东西:

$(document).keyup(function hotkeys(e) { 
    if (e.which == 13)
    {
        e = jQuery.Event("keydown")
        e.which = 16;
        $(document).trigger(e);
        e.which = 13;
        $(document).trigger(e);
        alert("trigger");
    }
});

它不起作用。

谢谢。

4

1 回答 1

0

假设rangy.js

$('#myeditelement').on('keydown', function(ev){
    if (ev.which === 13) { insertNewLine(ev) }
})

然后,

function insertNewLine(ev){
    var nodeA, nodeB, sel, range

    if (ev.stopPropagation) { ev.stopPropagation() }
    if (ev.preventDefault) { ev.preventDefault() }

    sel = rangy.getSelection()
    range = sel.getRangeAt(0)

    range.deleteContents()
    nodeA = document.createElement('br')
    range.insertNode(nodeA)
    range.setStartAfter(nodeA)
    nodeB = document.createElement('span')
    range.insertNode(nodeB)
    range.selectNodeContents(nodeB)
    sel.removeAllRanges()
    sel.addRange(range)
    sel.collapseToEnd()
  }

截至 2017 年 11 月在 Chrome、Opera、Edge 中进行了测试。

于 2017-11-09T23:34:43.607 回答