Laura: deep copy eines Range-Objektes

Beitrag lesen

Hab's jetzt so gemacht:

function wrap(range, wrapper) {
  range.surroundContents(wrapper);
  var clone = document.createRange();
  clone.selectNode(wrapper);
  ranges.push(clone);
  range.collapse(false);
}

  
Vermutlich die einfachste und eleganteste Lösung für diesen Fall, aber doch  
unbefriedigend, dass ich keine simple Methode sehe, einen "Zustand" des  
Range-Objektes "einzufrieren".  
  
`console.log(Lib.copy(true, range))`{:.language-javascript} ergibt:  
 "[unsupported: no toString() function in type object]"  
  
~~~javascript
  
// copy ist hier eine Methode eines Objekt-Literals, ebenso wie  
// isBoolean, isArray und isLiteral  
var Lib = {  
copy: function(deep, obj, copy) {  
  copy || (copy = {});  
  var isBoolean = this.isBoolean(deep)  
  , isArray = false;  
  obj = (isBoolean) ? obj : deep;  
  deep = (isBoolean) ? deep : false;  
  for (var m in obj) {  
    if (deep && obj[m] && (this.isLiteral(obj[m]) || (isArray = this.isArray(obj[m])))) {  
      if (isArray) { copy[m] = obj[m].slice(0);  
      } else { copy[m] = this.copy(deep, obj[m]); }  
    } else { copy[m] = obj[m]; }  
  }  
  return copy;  
}  
//,...  
}