Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Фокус на элементе внутри contenteditable (https://javascript.ru/forum/dom-window/81686-fokus-na-ehlemente-vnutri-contenteditable.html)

shareware 13.01.2021 10:42

Фокус на элементе внутри contenteditable
 
Подскажите, как правильно определить редактируемый элемент, либо тот, в котором находится каретка. Я делаю так, и, т.к. внутри созданного параграфа автоматически ставится
<br>
то проверяю на пустоту:

$('#article').on('keydown keyup click',function(e) {
   console.log(e.target.textContent == '');
});


В результате данная логика дает TRUE только если я непосредственно кликну мышкой на вновь созданный параграф. В остальных случаях (стрелочки, кнопки) - FALSE.

Если выводить чисто textContent то видно, что при переключении стрелочками по пустым параграфам он берет текст из предыдущего, непустого параграфа, хотя на него фокус не падает

voraa 13.01.2021 11:23

document.activeElement - дает тот элемент, на котором в данный момент находится фокус.

shareware 13.01.2021 11:26

Это не работает т.к. он также покажет, что активным является article, а не параграф внутри него

voraa 13.01.2021 11:44

Я так понял, что надо получить тот элемент, в котором находится каретка?
Можно попробовать повозиться с selections.
Что вроде такого

const sel = window.getSelection();
let el = sel.focusNode;   // скорее всего получим текстовый узел, а не элемент
if (el.nodeType != 1) el = el.parentElement; // тогда получаем родительский элемент.

shareware 13.01.2021 11:46

Да, вроде то, что нужно. Спасибо!


Часовой пояс GMT +3, время: 13:13.