如果它位于<li>元素(contentEditable)</li>中,请避免使用createElement函数

时间:2011-05-16 23:30:03

标签: jquery parent contenteditable getselection

我正在使用此功能,以便使用Safari和Chrome在contentEditable div的替换行中将<DIV>New Divs</DIV>替换为<BR>

$("#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;
}
}
});

问题是,当我在<UL><LI>Something</LI></UL>内输入并按“返回”键时,我不想获得<BR>,因此我可以继续使用该列表。 ..

如果我在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 }

1 个答案:

答案 0 :(得分:1)

首先,使用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();
 ..
}