ich eine Reihe basierend auf einer Benutzerauswahl erschaffe die folgende Methode:Wie bekomme ich die Bereichsoffsets eines gesamten div in Javascript?
var selection = window.getSelection();
var beginsAt = selection.getRangeAt(0).startOffset;
var endsAt = selection.getRangeAt(0).endOffset;
return [beginsAt,endsAt];
Die Komponente, die diese Funktion hat die folgende ruft:
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>
)
Immer, wenn ich meinen Text wählen, ist der Bereich immer relativ zum Endpunkt des markierten Bereichs. Wenn mein Text also in einem Bereich zwischen 0 und 50 liegt und ich den Bereich [25,26] auswähle, dann wähle den Bereich [26,27], anstatt den Bereich [26,27] hervorzuheben, er hebt den Bereich von [0 hervor, 1] weil der Bereich [0,1] relativ zu dem von {nach} erzeugten Text war.
Solange ich einen Text hervorhebe, der von {vorher} gerendert wurde, habe ich keine Probleme, nur wenn ich etwas hervorhebe, das im Abschnitt {after} gerendert wurde.
Wie kann ich diese Bereichswerte relativ zum Stamm des gesamten Textes und nicht relativ zu den Blöcken machen, in denen sie gerendert werden? Ist das eine Einschränkung der Reaktion oder meiner Umsetzung?
Diese Implementierung würde sicherlich funktionieren, aber ich fand eine einfachere spezifische Lösung für mein Problem. Danke für deinen Beitrag! – FactorialTime