[whatwg/dom] replaceChildren can not replace a Document's documentElement (Issue #1045)

Given a `document` that contains an element, and the following code: 

```
const fragment = document.createDocumentFragment();
const element = fragment.appendChild(document.createElement('element'));
document.replaceChildren(fragment);
```

Expected result: `document` now only contains `element`
Actual result: HierarchyRequestError

This is caused by replaceChildren calling "ensure pre-insertion validity without taking into consideration that the existing children of the document will be removed. This then fails on the following rule:

> Otherwise, if node (the fragment) has one element child and either parent (the document) has an element child, child is a doctype, or child is non-null and a doctype is following child.

Perhaps an argument should be added to make this algorithm ignore pre-existing children when called from replaceChild, or perhaps replaceChildren should use a modified copy of these steps, as was done in replaceChild?

-- 
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/dom/issues/1045
You are receiving this because you are subscribed to this thread.

Message ID: <whatwg/dom/issues/1045@github.com>

Received on Friday, 14 January 2022 14:06:52 UTC