У меня есть рабочий код, который вставляет <br>, когда вы нажимаете Enter в редактируемый div содержимого. (Браузеры имеют различные значения по умолчанию для вставки <div> или <p> вместо этого)

Проблема состоит в том, что он убивает поведение по умолчанию нажатия Enter, чтобы добавить другой элемент списка при построении упорядоченных или неупорядоченных списков. Поэтому мой вопрос заключается в том, можете ли вы определить, находится ли точка вставки текста в элементе списка, и если да, отключить JavaScript, который имеет дело с клавишей ввода?

Рабочий код: http://jsfiddle.net/kthornbloom/RCdhS/

1
kthornbloom 30 Янв 2013 в 20:56

2 ответа

Лучший ответ

Вам необходимо выполнить некоторую проверку дерева DOM на узле, содержащем выбор. Вот демонстрация, которая будет работать во всех основных браузерах:

http://jsfiddle.net/CeMxs/2/

Код:

function isSelectionInsideElement(tagName) {
    var sel, containerNode;
    tagName = tagName.toUpperCase();
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.rangeCount > 0) {
            containerNode = sel.getRangeAt(0).commonAncestorContainer;
        }
    } else if ( (sel = document.selection) && sel.type != "Control" ) {
        containerNode = sel.createRange().parentElement();
    }
    while (containerNode) {
        if (containerNode.nodeType == 1 && containerNode.tagName == tagName) {
            return true;
        }
        containerNode = containerNode.parentNode;
    }
    return false;
}
6
Tim Down 30 Ноя 2013 в 10:07

http://jsfiddle.net/RCdhS/2/

.on('keypress', 'document', function (e) {
    if (!$('li').focus();) {
    ...
    }
  }
});
1
isherwood 4 Фев 2013 в 19:33