我使用下面的方法基於用戶選擇創建範圍:如何獲得Javascript中整個div的範圍偏移量?
var selection = window.getSelection();
var beginsAt = selection.getRangeAt(0).startOffset;
var endsAt = selection.getRangeAt(0).endOffset;
return [beginsAt,endsAt];
調用此函數的組件具有下列功能:
let before = text.substring(0, range[0]);
let highlighted = text.substring(range[0], range[1]);
let after = text.substring(range[1], text.length);
return(
<div>
{before}
<span style={{
backgroundColor: 'yellow'
}}>
{highlighted}
</span>
{after}
</div>
)
每當我選擇我的文字,範圍始終相對於突出顯示的跨度結束的位置。因此,如果我的文本在0到50之間的範圍內,選擇範圍[25,26],然後選擇範圍[26,27],而不是突出顯示範圍[26,27],則突出顯示從[0, 1],因爲範圍相對於{after}生成的文本[0,1]。
只要突出顯示{before}呈現的任何文本,我就沒有問題,只有當我突出顯示{after}部分中呈現的內容時。
如何使這些範圍值相對於整個文本的根而不是相對於它們被渲染的塊?這是反應或我的實施的限制嗎?
這個實現肯定會工作,但我找到了一個更簡單的特定解決方案來適應我的問題。謝謝您的意見! – FactorialTime