Laura: deep copy eines Range-Objektes

Beitrag lesen

So, hier mein letzter (und diesmal funktionierender) Ansatz - für den Fall,
dass jemand ein ähnliches Problem hat:

Stark vereinfachtes Bsp.:

  
var copies = [],  
    parents = [];  
  
function wrap(range, wrapper) {  
  // kann man noch optimieren; worauf es ankommt, ist, die properties  
  // startOffset, endOffset (und ggf. commonAncestorContainer etc.) zu  
  // sichern, weil diese in range selbst sich ändern durch bspl.  
  // surroundContents oder collapse  
  copies.push(eineDeepCopyFunction(range));  
  range.surroundContents(wrapper);  
  // dass ich hier in globale Arrays pushe, um die nötigen Infos zu retten,  
  // liegt am vereinfachten Bsp. - ist natürlich unschön  
  parents.push(wrapper.parentNode);  
  range.collapse(false);  
}  
  
function unwrap(wrapper) {  
  var parent = wrapper.parentNode;  
  parent.replaceChild(wrapper.fistChild, wrapper);  
  parent.normalize();  
}  
  
function rewrap(wrapper) {  
  // die copy ist kein Ränge-Objekt, mit dem man einfach so weiterarbeiten  
  // könnte; benötige ein paar properties, um damit neue range zu generieren  
  var range = document.createRange(),  
      parent = parents.pop(),  
      copy = copies.pop();  
  range.setStart(parent, copy.startOffset);  
  range.setEnd(parent, copy.endOffset);  
  wrap(range, wrapper);  
}