Laura: deep copy eines Range-Objektes

Beitrag lesen

Hallo,

ich habe Folgendes vor:
  1. über var range = window.getSelection().getRangeAt(0) die selection wrappen mit range.surroundContents(wrapper);
  2. dies soll rückgängig gemacht werden können (Strg+Z), indem der wrapper durch wrapper.firstChild ersetzt und mit wrapper.parentNode.normalize() die Zerstückelung der textNodes wieder aufgehoben wird;
  3. das Rückgängig-Machen soll rückgängig gemacht werden können (Strg+Y), indem das Range-Objekt zuvor abgespeichert und nun wieder verwendet wird.

Das Problem:
Ich müsste eine deep copy von range abspeichern - einfach var copy = range oder var copy = range.cloneRange() bringt nicht das gewünschte Resultat, weil hier per Referenz kopiert wird und der gewünschte Zustand von range durch surroundContents und collapse nicht erhalten bleibt.

Stark vereinfachtes Bsp.:

  
var ranges = [];  
  
function wrap(range, wrapper) {  
  var clone = ?????;  
  ranges.push(clone);  
  range.surroundContents(wrapper);  
  range.collapse(false);  
}  
  
function unwrap(wrapper) {  
  var parent = wrapper.parentNode;  
  parent.replaceChild(wrapper.fistChild, wrapper);  
  parent.normalize();  
}  
  
function rewrap() {  
  wrap(ranges.pop(), wrapper);  
}  

Ohne normalize() bliebe die textNode erhalten und ich bräuchte das Range-Objekt gar nicht wiederverwenden, aber leider kann ich darauf nicht verzichten.