Показать сообщение отдельно
  #1 (permalink)  
Старый 12.02.2024, 11:38
Аспирант
Отправить личное сообщение для ekad Посмотреть профиль Найти все сообщения от ekad
 
Регистрация: 17.04.2013
Сообщений: 35

Получить номер блока div в котором текстовый курсор?
Нужно получить номер 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.');
  }
}
Ответить с цитированием