Javascript 在contentEditable中触发ENTER事件

Javascript 在contentEditable中触发ENTER事件,javascript,jquery,Javascript,Jquery,我有一个contenteditable div,当按下某些键(如D)时,我想触发“回车”。下面的代码不工作 $'div_edit'.keydown函数{ ife.keyCode==68{ var k=jQuery.Event'keypress',{which:13}; $'div_edit'.triggerk; } }; 希望这能让你更接近你想要做的事情: //作用于http://stackoverflow.com/questions/4834793/set-caret-position-r

我有一个contenteditable div,当按下某些键(如D)时,我想触发“回车”。下面的代码不工作

$'div_edit'.keydown函数{ ife.keyCode==68{ var k=jQuery.Event'keypress',{which:13}; $'div_edit'.triggerk; } };
希望这能让你更接近你想要做的事情:

//作用于http://stackoverflow.com/questions/4834793/set-caret-position-right-after-the-inserted-element-in-a-contenteditable-div/48368094836809 函数insertNodeAtCaretnode{ 如果typeof window.getSelection!=未定义{ var sel=window.getSelection; 如果选择范围计数{ var范围=sel.getRangeAt0; range.collapsefalse; range.insertNodenode; range=range.cloneRange; range.selectNodeContentsnode; range.collapsefalse; 选择移除所有范围; 选择范围; } }否则,如果typeof document.selection!=未定义&&document.selection.type!=控件{ var html=node.nodeType==1?node.outerHTML:node.data; var id=marker++Math.random.slice2; html+=; var textRange=document.selection.createRange; textRange.collapsefalse; textRange.pasteHTMLhtml; var markerSpan=document.getElementByIdid; textRange.moveToElementTextmarkerSpan; textRange.select; markerSpan.parentNode.removeChildmarkerSpan; } } $'div_edit'.keydown函数{ 如果e.keyCode==68{ InsertNodeAttCareTDocument.createElementbr; } }; 那么:

射程部分来自尼科·伯恩斯的答案

  $('#div_edit').keydown(function(e) {
      if(e.keyCode == 68) {
        var br = document.createElement("br");
        var div_edit = document.getElementById("div_edit");
        div_edit.appendChild(br);

        var range = document.createRange();//Create a range (a range is a like the selection but invisible)
        range.selectNodeContents(div_edit);//Select the entire contents of the element with the range
        range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start
        var selection = window.getSelection();//get the selection object (allows you to change selection)
        selection.removeAllRanges();//remove any selections already made
        selection.addRange(range);//make the range you have just created the visible selection
     }
});

这段代码在某种程度上起作用,特别是当我指定附加div或p时,但我的主要问题是试图在新创建的元素中获取克拉/光标。我认为这会有帮助。你的代码创建了一个新元素,就像它应该创建的一样,但是在每次按D键时,它都会在第一个元素的内部创建另一个元素。已从br更改为“div”。我怎样才能让它在输入div_edit后创建一个文本并将克拉移到那里继续?因此:前面的文本将在这里继续