ivorysmoker: JS - getRangeAt: DIV:Zeilen (Absätze) verbinden möglich?

Beitrag lesen

Hallo Axel,

Leider bin ich noch auf ein Problem gestossen und wollte einmal bei dir nachfragen ob du dazu eine Lösung hättest oder einen Anreiz.

Nehmen wir wieder ein einfaches Beispiel zur erklärung:

<div>
Das ist die Zeile 1
Das ist die Zeile 2
Das ist die Zeile 3
</div>

Also der StartContainer liest ja Zeilenweise,
makiert man jetzt folgende Zeile:

Das ist die Zeile1

Gibt die erste Position 0 aus und die End Pos 16. Soweit sogut!

Makiert man jetzt aber 2 Zeilen auf einmal, hat die Funktion ein Problem.
Ich denke das ist weil man ja Zeilenweise ausliesst.

Meine Idee zur Problembehebung:

Als Beispiel wäre Zeile 1 und 2 makiert.

Das ist die Zeile 1
Das ist die Zeile 2

Jetzt fängt der Code ja bei Zeile1 an zu suchen, hier sollte bereits der Startparameter 0 übergeben werden, springt der Code jetzt aber zu Zeile2 werden die StartParameter und EndParameter nicht gefunden. Da es ja bei einer neuen Zeile wieder von 0 anfängt...

Das Resultat der Parameter sollte bei diesem Bsp. Start: 0 End: 32 c.a ausgeben.

Hat man hier die möglichkeit auszulesen in welcher Zeile sich das makierte befindet und wie viele Zeilen schon übersprungen wurden sowie wie viele Zeichen es waren.
Dann könnte man diesen Fehler beheben.

Zeilenweise ersetzen funktioniert einwandfrei ohne Probleme! Auch bei doppelten wörter etc...

Ich bedanke mich schon zum voraus für deine Bemühungen und wünsche einen angenehmen Nachmittag.

  
var sel = window.getSelection();  
                if(sel == ""){  
                    alert("Makieren Sie den gewünschten Text");  
                    return;  
                }  
                var ersteSelRange = sel.getRangeAt(0);  
  
                if (!ersteSelRange.collapsed) {  
  
                    var startContainer = ersteSelRange.startContainer;  
                    var endContainer = ersteSelRange.endContainer;  
                if (startContainer == endContainer) {  
  
                    var posStart = ersteSelRange.startOffset;  
                    var posEnd = ersteSelRange.endOffset;  
                     alert('StartPosition'+posStart);  
                     alert('StartPosition'+posEnd);  
                    var startContainerText = startContainer.textContent;  
  
                    var ersteSelRangeText = ersteSelRange.toString();  
                    //alert('RegEx Ausgabe: 'regexfirst+regexnext);  
                    startContainer.textContent = startContainerText.substr(0, posStart) + regexfirst + ersteSelRangeText + regexnext +  
                    startContainerText.substr(posEnd);  
  }  
 }