AngleSharp by Florian Rappl

<PackageReference Include="AngleSharp" Version="0.8.0" />

 ParentNodeExtensions

static class ParentNodeExtensions
Useful methods for parent node objects.
using AngleSharp.Dom; using System.Diagnostics; namespace AngleSharp.Extensions { [DebuggerStepThrough] internal static class ParentNodeExtensions { public static INode MutationMacro(this INode parent, INode[] nodes) { if (nodes.Length > 1) { IDocumentFragment documentFragment = parent.Owner.CreateDocumentFragment(); for (int i = 0; i < nodes.Length; i++) { documentFragment.AppendChild(nodes[i]); } return documentFragment; } return nodes[0]; } public static void PrependNodes(this INode parent, params INode[] nodes) { INode node = parent.MutationMacro(nodes); parent.PreInsert(node, parent.FirstChild); } public static void AppendNodes(this INode parent, params INode[] nodes) { INode node = parent.MutationMacro(nodes); parent.PreInsert(node, null); } public static void InsertBefore(this INode child, params INode[] nodes) { INode parent = child.Parent; if (parent != null && nodes.Length != 0) { INode node = parent.MutationMacro(nodes); parent.PreInsert(node, child); } } public static void InsertAfter(this INode child, params INode[] nodes) { INode parent = child.Parent; if (parent != null && nodes.Length != 0) { INode node = parent.MutationMacro(nodes); parent.PreInsert(node, child.NextSibling); } } public static void ReplaceWith(this INode child, params INode[] nodes) { INode parent = child.Parent; if (parent != null && nodes.Length != 0) { INode newChild = parent.MutationMacro(nodes); parent.ReplaceChild(newChild, child); } } public static void RemoveFromParent(this INode child) { child.Parent?.PreRemove(child); } } }