Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.01.2021, 10:42
Аспирант
Отправить личное сообщение для shareware Посмотреть профиль Найти все сообщения от shareware
 
Регистрация: 04.11.2019
Сообщений: 32

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

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


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

Если выводить чисто textContent то видно, что при переключении стрелочками по пустым параграфам он берет текст из предыдущего, непустого параграфа, хотя на него фокус не падает
Ответить с цитированием
  #2 (permalink)  
Старый 13.01.2021, 11:23
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,702

document.activeElement - дает тот элемент, на котором в данный момент находится фокус.
Ответить с цитированием
  #3 (permalink)  
Старый 13.01.2021, 11:26
Аспирант
Отправить личное сообщение для shareware Посмотреть профиль Найти все сообщения от shareware
 
Регистрация: 04.11.2019
Сообщений: 32

Это не работает т.к. он также покажет, что активным является article, а не параграф внутри него
Ответить с цитированием
  #4 (permalink)  
Старый 13.01.2021, 11:44
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,702

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

const sel = window.getSelection();
let el = sel.focusNode;   // скорее всего получим текстовый узел, а не элемент
if (el.nodeType != 1) el = el.parentElement; // тогда получаем родительский элемент.
Ответить с цитированием
  #5 (permalink)  
Старый 13.01.2021, 11:46
Аспирант
Отправить личное сообщение для shareware Посмотреть профиль Найти все сообщения от shareware
 
Регистрация: 04.11.2019
Сообщений: 32

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


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать на каком элементе сработал фокус Verbal Элементы интерфейса 14 17.07.2014 13:19
Как сохранить фокус на элементе? SkaN jQuery 11 31.08.2012 18:31
contentEditable div и img внутри syegorius Events/DOM/Window 4 25.03.2012 19:01
Описание инпутов внутри них. Madd Общие вопросы Javascript 2 12.08.2010 23:04
Как убрать выделение в Опере у div, получившего фокус ? spa_2002 Opera, Safari и др. 5 03.09.2009 10:42