Получить номер блока div в котором текстовый курсор?
Нужно получить номер div по счету в котором находится текстовой курсор. В данном примере после нажатия на кнопку в alert отражается номер div
если несколько раз нажать Enter то создаются блоки. и если мышкой кликнуть на конкретный блок то в переменную запишется номер блока и алертом этот номер можно увидеть но если если несколько раз нажать Enter, и перемещаться по блокам не кликами а стрелками вверх вниз то в переменную всегда записывается 1 и алертом номер 1 можно увидеть как перемещение стрелками текстового курсора можно передавать номер блока в переменную currentDivIndex Код:
|
ekad,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <style type="text/css"> [contenteditable]>div.active { border: 4px red solid; } #out{ color: #0000CD; } </style> </head> <body> <output id="out"></output> <div id="pt_text" contenteditable="true"> <div>111</div> <div>111</div> <div>(тут курсор)</div> </div> <script> let edit = document.querySelector('#pt_text'), div_active; const deactivate = () => { edit.querySelectorAll('.active').forEach(div => div_active === div || div.classList.remove('active')); document.querySelectorAll('#pt_text > div').forEach((div, i) => div.id = `n${++i}`); out.value = div_active ? `Курсор в ${div_active.id}` : ``; }; deactivate(); document.addEventListener('selectionchange', () => { if (document.activeElement === edit) { let el = window.getSelection().focusNode; if (el.nodeType === 3) el = el.parentNode; div_active = el; deactivate(); div_active.classList.add('active'); } }); edit.addEventListener('focusout', ()=>{div_active=null,deactivate()}) edit.addEventListener('keyup', deactivate) </script> </body> </html> |
Благодарю от души. Как же ты невероятно крут!
|
я два дня с утра до вечере решал этот вопрос и чат ГПТ использовал, на клаве все кнопки стер.
а ты дал просто супер решение. Еще раз спасибо. Не сдержался написать. |
Часовой пояс GMT +3, время: 16:03. |