Replacing node without any context doesn't actually make sense and
is probably an error of the client code.
         if(this.isRoot()) {
             return this.document.replaceRoot(node);
         }
         if(this.isRoot()) {
             return this.document.replaceRoot(node);
         }
-        toret = this.after(node);
-        this.detach();
-        return toret;
+        if(this.parent()) {
+            toret = this.after(node);
+            this.detach();
+            return toret;
+        }
+        throw new Error('Cannot replace node without a parent.');
     },
 
     after: INSERTION(function(node) {
     },
 
     after: INSERTION(function(node) {