如果它位于元素内,则避免使用createElement函数(contentEditable)

我正在使用此function,以便使用Safari和Chrome在contentEditable div的替换行中用
替换

New Divs

 $("#form_description").live("keypress", function(e){ if (e.which == 13) { if (window.getSelection) { var selection = window.getSelection(), range = selection.getRangeAt(0), br = document.createElement("br"); range.deleteContents(); range.insertNode(br); range.setStartAfter(br); range.setEndAfter(br); range.collapse(false); selection.removeAllRanges(); selection.addRange(range); return false; } } }); 

问题是,当我在

  • Something
输入内容并按“返回”键时,我不想得到
,所以我可以继续列入清单…

如果我在LI元素中,我怎么能创建一个不工作的条件?

编辑我的答案:

好的,我已经设法做到了,但如果您对代码有任何评论,欢迎您:

 $("#form_description").live("keypress", function(e){ if (e.which == 13) { node = document.getSelection().anchorNode; nodeName = node.parentNode.nodeName.toLowerCase(); if ((nodeName != "li") && (nodeName != "blockquote")) { ... etc } 

首先,使用keyup作为事件名称,keypress仅适用于Firefox。

第二,e。这并不总是可用的。 主要使用e.keyCode,然后回到e.which:

 var code = e.keyCode || e.which; if (code == 13) { // your code here.. } 

第三,如果您需要取消在按键中触发的默认事件,您可能希望在事件处理程序例程中引入preventDefault()。 确保它是第一行。

 function(e){ e.preventDefault(); .. }