Я использовал этот код, чтобы получить индекс диапазона, и я хочу выделить выбранный диапазон и напечатать выбранный текст.
let
div = document.querySelector('div'),
text = div.innerText;
div.addEventListener('mouseup', evt => {
let
sel = getSelection(),
result = {
start: null,
end: null
};
['start', 'end'].forEach(which => {
let
counter = 1,
tmpNode = div.querySelector('span'),
node = which == 'start' ? 'anchor' : 'focus';
if (!sel) return;
while (tmpNode !== sel[node + 'Node'].parentElement) {
result[which] += tmpNode.innerText.length;
counter++;
tmpNode = div.querySelector('span:nth-child(' + counter + ')')
}
result[which] += sel[node + 'Offset'] + (which == 'start' ? 1 : 0);
});
alert('Selection starts at ' + result.start + ' and ends at ' + result.end);
}, false);
div {
padding: 2rem;
background: royalblue;
color: white;
}
<div>
<span>This </span>
<span>is </span>
<span>plain </span>
<span>text </span>
<span>and </span>
<span>this </span>
<span>is </span>
<span>more </span>
<span>plain </span>
<span>text </span>
<span>and </span>
<span>this </span>
<span>is </span>
<span>the </span>
<span>final </span>
<span>plain </span>
<span>text</span>
</div>
Я использую предыдущий код, чтобы выделить административную панель для просмотра и сравнения текстов и выделения неправильных слов.