Избегайте функции createElement, если внутри элемента <LI> (contentEditable)

Я использую эту функцию, чтобы заменить <DIV>New Divs</DIV> на <BR> в строках разрыва на contentEditable divs, используя Safari и Chrome:

$("#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>, и я нажимаю клавишу "return", я не хочу получать <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

Сначала используйте keyup в качестве имени события, keypress работает только в Firefox.

Во-вторых, e.which не всегда доступен. Сначала используйте e.keyCode и вернитесь к e.which:

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

В-третьих, если вам нужно отменить события по умолчанию, запущенные при нажатии клавиши, вам может потребоваться включить функцию preventDefault() внутри вашей процедуры обработчика событий. Убедитесь, что это первая строка.

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