Добавить функцию keyDown() в , которые являются новыми дочерними элементами для редактируемого div

#javascript #jquery #contenteditable

#javascript #jquery #редактируемый

Вопрос:

Jsfiddle:http://jsfiddle.net/qTEmc/1 /

Мне нужно связать события с событием нажатия клавиши по ссылкам, которые добавляются в contenteditable.

Если вы попытаетесь ввести текст в области редактируемого содержимого в связанном jfiddle, вы увидите, что создается ссылка, и вы можете вводить в ней. Если вы нажмете return, вы перейдете к новой строке. Что я хочу, так это нажать return в новой ссылке, чтобы запустить функцию. Ради прогресса я просто пытаюсь заставить его возвращать предупреждение в данный момент.

Кто-нибудь знает надежный способ сделать это?

Ответ №1:

Вы не сможете обнаружить ключевые события внутри самих ссылок, потому что они не запускают ключевые события. Вместо этого вам нужно будет адаптировать ваш существующий keypress обработчик для элемента contenteditable, чтобы проверить выделение, чтобы увидеть, находится ли оно внутри ссылки. Вот функция для этого. Я также обновил вашу демонстрацию.

 function selectionInsideLink() {
    var node = null, sel;

    // Get the selection container node
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.rangeCount) {
            node = sel.getRangeAt(0).commonAncestorContainer;
        }
    } else if (document.selection) {
        sel = document.selection;
        if (sel.type != "Control") {
            node = sel.createRange().parentElement();
        }
    }

    // Check if the node is or is contained inside a link
    while (node) {
        if (node.nodeType == 1 amp;amp; node.tagName.toLowerCase() == "a") {
            return true;
        }
        node = node.parentNode;
    }
    return false;
}
  

Комментарии:

1. Я когда-нибудь говорил тебе, что ты мой герой? Я новичок в range и select, так что это огромная помощь. Спасибо.