Как получить все теги при выделении текста в contenteditable

150
02 апреля 2019, 01:30

У меня есть div с contenteditable. Например, в нем есть 4 теги p с текстом. И пользователь выбирает текст начиная с середины второго абзаца и до середины третьего. Есть ли возможность получить все p, которые входят в это выделение?

Answer 1

Ещё надо допиливать, но идея примерно такая:

document.addEventListener('selectionchange', function () { 
  var s = getSelection() 
 
  for (var a = s.anchorNode; a && a.tagName !== 'P'; a = a.parentElement); 
  for (var b = s.focusNode;  b && b.tagName !== 'P'; b = b.parentElement); 
 
  if (!a || !b || a.parentElement !== b.parentElement) return 
   
  var res = [], els = a.parentElement.children 
 
  if (a === b) { 
    res.push(a) 
  } else { 
    for (var q=0; q<els.length; ++q) { 
      if (els[q] === a || els[q] === b) { 
        res.push(els[q]) 
        while (res.push(els[++q]), els[q] !== a && els[q] !== b); 
        break 
      } 
    } 
  }   
   
  console.log(res.map(function (x) { return x.textContent }).join("\n")) 
})
p { margin: 0 }
<p>У меня есть div с contenteditable.</p> 
<p>Например, в нем есть 4 теги p с текстом.</p> 
<p>И пользователь выбирает текст начиная с середины второго абзаца и до середины третьего.</p> 
<p>Есть ли возможность получить все p, которые входят в это выделение?</p>

READ ALSO
Элемент не получает фокус

Элемент не получает фокус

У меня есть скрипт, который при клике на кнопку добавляет на страницу ul c liКогда фокус находится на li и пользователь нажимает Enter - я создаю...

142
Как правильно сделать Dependency Injection. Теоретический вопрос

Как правильно сделать Dependency Injection. Теоретический вопрос

Изучаю вопрос связанный с IOC (Инверсия управления), как я понял это некий абстрактный паттерн, который говорит,что нужно делать слабое связывание...

165
hmac(вывод ключа) RandomNumberGenerator c#

hmac(вывод ключа) RandomNumberGenerator c#

Вывод ключа неверный, в чем может быть проблема?

231
Взаимодействие WindowsForm C# и DLL написанной на С#

Взаимодействие WindowsForm C# и DLL написанной на С#

Программа на С# загружает динамическую библиотеку написанную на том же С#Соответственно dll выполняет одну только функцию

156