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.