Archivlink: javarea.de Forum > JavaScript > Absoluten Index einer Node finden und über den absoluten Index die Node wiederfinden
Vollständigen Link anzeigen: javarea.de Forum > JavaScript > Absoluten Index einer Node finden und über den absoluten Index die Node wiederfinden

Pages: [1]

geschrieben von exceeder am 16.06.2011 - 12:00
Hallo,

ich entwickle auf der Basis von Chromium (eine einbettbare Version von Chrome) gerade einen WYSIWIG HTML-Editor. Ich bin derzeit dabei einen Stack für Undo/Redo zu bauen.

Beim speichern des aktuellen Zustands für den Browser speichere ich den Inhalt und hole mir die Selektion über einen kleinen JavaScript-Code:

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
var selection = window.getSelection();
if(selection.getRangeAt && selection.rangeCount > 0)
  var range = selection.getRangeAt(0);
else
  var range = null;


Das "range"-Object enhält nun die üblichen Eigenschaften wie anchorNode, anchorOffset, focusNode und focusOffset. Das Problem dabei ist, dass sich die *Node Eigenschaften auf das aktuelle Dokument beziehen (so eine Art Zeiger). Von außen wird bei einem Undo nun der komplette Quelltext des Dokuments auf den alten Zustand geändert. Gerne würde ich nun die Selektion ebenfalls wiederherstellen.

Lange Rede, kurzer Sinn, wie komme ich an den absoluten Index der beiden *Node Eigenschaften innerhalb des DOM-Baums über JavaScript und wie kann ich über den Index das passende Node-Element später wiederfinden? Ich benötige dabei nur Chrome spezifischen Code und keine Browserweichen oder so. Das lesen des Indexes über die *Node und die parentNode bis nach ganz oben funktioniert scheinbar problemlos. Wenn ich aber am document-Node ansetze und mich nach "unten" arbeiten will, endet das scheinbar in einer Endlosrekursion. Diese Variante brauche ich aber, um anhand des Indexes später die richtige Node wiederzufinden.

Ich scheitere am simplen durchlaufen des DOM-Baums:

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
function getDomChilds(parent) {
  for(i = 0; i < parent.childNodes.length; i++) {
    getDomChilds(parent.childNodes[i]);
  }
}


Wenn ich die Funktion mit dem Parameter "document" aufrufe, dann schmiert der Browser ab bzw. bleibt in einer Endlosschleife hängen. Hab ich irgendwas nicht bedacht?


Powered by: JBB v.2.0.4 Copyright ©2000-2006, www.javarea.de.