def transplant_nodes(parent: Element, new_parent: Element, start: Node, end: Node) -> Element: start_pos = parent.index(start) end_pos = parent.index(end) for _ in range(start_pos + 1, end_pos): # Note: do not use Element.remove() here. # It removes wrong node if the target is Text. subnode = parent.pop(start_pos + 1) new_parent += subnode return new_parent