Hallo,
okay, wieder was gelernt. Ich wusste nicht, dass "var" die Variable lokal definiert und ohne var Global anlegt. Erklärt natürlich das Problem.
Hier ist nun mein aktualisierter Quelltext:
var nodeIndex;
function getChildNodeIndex(parent, node) {
nodeIndex++;
for(var i = 0; i < parent.childNodes.length; i++)
if(parent.childNodes[i] == node || getDomChilds(parent.childNodes[i], node))
return true;
return false;
}
function getNodeIndex(node) {
nodeIndex = -1;
if(getChildNodeIndex(document, node))
return nodeIndex;
else
return -1;
}
var selection = window.getSelection();
if(selection.getRangeAt && selection.rangeCount > 0)
var range = selection.getRangeAt(0);
else
var range = null;
var anchorNode = getNodeIndex(selection.anchorNode);
var anchorOffset = selection.anchorOffset;
var focusNode = getNodeIndex(selection.focusNode);
var focusOffset = selection.focusOffset;
Stürzt zumindest nicht mehr ab, allerdings klappt der Vergleich
parent.childNodes[i] == node
nicht. Es gibt im gesamten DOM leider keinen Treffer. Es muss doch irgendwie möglich sein, die anchorNode aus der Selektion irgendwie wieder zu finden.
Die Umgebung ist Chrome in einer von mir festgelegten Version. Wichtig ist halt nur, dass der nodeIndex für das selbe Element im selben HTML Dokument wieder den selben Index ergibt. Der Undo-Stack hat für jeden Undo Schritt halt die Daten + Selektion.
Vielleicht mache ich bei meinem Vergleich ja noch etwas falsch, eine Idee dazu?