WPT
wpt / dom / ranges / Range-attribute-nodes.html
Spec: DOM ↗
Runs: Chrome 155.0.8040.0 (wpt@105b6a3a5, 2026-09-03) | Firefox 157.0a1 (wpt@9b4cabf6d, 2026-09-03) | Safari 251 preview (wpt@5ce815a83, 2026-08-27) | Ladybird 1.0-f436a (wpt@476394464, 2026-09-03) | Servo Servo 0.6 (wpt@7e3d005d7, 2026-09-03) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 26/26 | 26/26 | 26/26 | 26/26 | 26/26 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| setStart() to an Attr node at offset 0 is allowed | PASS | PASS | PASS | PASS | PASS | — |
| setEnd() to an Attr node at offset 0 is allowed | PASS | PASS | PASS | PASS | PASS | — |
| setStart() to an Attr node past its length (0) throws IndexSizeError | PASS | PASS | PASS | PASS | PASS | — |
| setEnd() to an Attr node past its length (0) throws IndexSizeError | PASS | PASS | PASS | PASS | PASS | — |
| setStartBefore() with an Attr node throws InvalidNodeTypeError (null parent) | PASS | PASS | PASS | PASS | PASS | — |
| setStartAfter() with an Attr node throws InvalidNodeTypeError (null parent) | PASS | PASS | PASS | PASS | PASS | — |
| setEndBefore() with an Attr node throws InvalidNodeTypeError (null parent) | PASS | PASS | PASS | PASS | PASS | — |
| setEndAfter() with an Attr node throws InvalidNodeTypeError (null parent) | PASS | PASS | PASS | PASS | PASS | — |
| selectNode() with an Attr node throws InvalidNodeTypeError (null parent) | PASS | PASS | PASS | PASS | PASS | — |
| selectNodeContents() on an Attr node selects an empty range rooted at the Attr | PASS | PASS | PASS | PASS | PASS | — |
| comparePoint() with an Attr node not sharing the range's root throws WrongDocumentError | PASS | PASS | PASS | PASS | PASS | — |
| isPointInRange() with an Attr node not sharing the range's root returns false | PASS | PASS | PASS | PASS | PASS | — |
| intersectsNode() with an Attr node not sharing the range's root returns false | PASS | PASS | PASS | PASS | PASS | — |
| comparePoint() with an Attr node sharing the range's root | PASS | PASS | PASS | PASS | PASS | — |
| isPointInRange() with an Attr node sharing the range's root | PASS | PASS | PASS | PASS | PASS | — |
| intersectsNode() with an Attr node sharing the range's root returns true | PASS | PASS | PASS | PASS | PASS | — |
| compareBoundaryPoints() across an Attr-rooted range and a document-rooted range throws WrongDocumentError | PASS | PASS | PASS | PASS | PASS | — |
| compareBoundaryPoints() between two ranges rooted at the same Attr node returns 0 | PASS | PASS | PASS | PASS | PASS | — |
| deleteContents() on an Attr-rooted range is a no-op | PASS | PASS | PASS | PASS | PASS | — |
| extractContents() on an Attr-rooted range returns an empty fragment | PASS | PASS | PASS | PASS | PASS | — |
| cloneContents() on an Attr-rooted range returns an empty fragment | PASS | PASS | PASS | PASS | PASS | — |
| insertNode() into an Attr-rooted range throws HierarchyRequestError | PASS | PASS | PASS | PASS | PASS | — |
| surroundContents() on an Attr-rooted range throws HierarchyRequestError | PASS | PASS | PASS | PASS | PASS | — |
| insertNode() with an Attr node argument throws HierarchyRequestError | PASS | PASS | PASS | PASS | PASS | — |
| cloneRange() preserves an Attr-rooted range | PASS | PASS | PASS | PASS | PASS | — |
| stringifying an Attr-rooted range returns the empty string | PASS | PASS | PASS | PASS | PASS | — |