Нужно получить номер div по счету в котором находится текстовой курсор. В данном примере после нажатия на кнопку в alert отражается номер div
если несколько раз нажать Enter то создаются блоки. и если мышкой кликнуть на конкретный блок то в переменную запишется номер блока
и алертом этот номер можно увидеть
но если если несколько раз нажать Enter, и перемещаться по блокам не кликами а стрелками вверх вниз то в переменную всегда записывается 1
и алертом номер 1 можно увидеть
как перемещение стрелками текстового курсора можно передавать номер блока в переменную currentDivIndex
Код:
|
<div id="pt" contenteditable="true" onmousedown="rememberDiv(event)" onkeydown="handleKeyDown(event)">
<div><br></div>
</div>
<div onclick="show()">кнопка</div>
let currentDivIndex = null;
function rememberDiv(event) {
const target = event.target;
const divs = document.getElementById('pt').querySelectorAll('div');
divs.forEach((div, index) => {
if (div === target) {
currentDivIndex = index + 1;
return;
}
});
}
function handleKeyDown(event) {
const key = event.key;
if (key === 'ArrowUp' || key === 'ArrowDown') {
const parentDiv = document.getElementById('pt');
const divs = parentDiv.querySelectorAll('div');
const currentIndex = Array.from(divs).indexOf(document.activeElement.parentElement);
if (key === 'ArrowUp') {
currentDivIndex = Math.max(1, currentIndex);
} else {
currentDivIndex = Math.min(divs.length, currentIndex + 2);
}
}
}
function show() {
if (currentDivIndex !== null) {
alert('Номер по счету div: ' + currentDivIndex);
} else {
alert('Курсор не находится внутри div.');
}
}
|