/** * Insert the specified node into the DOM after this node (i.e. as a following sibling). * * @param node to add after this node * @return this node, for chaining * @see #before(Node) */ public Node after(Node node) { Validate.notNull(node); Validate.notNull(parentNode); parentNode.addChildren(siblingIndex() + 1, node); return this; }
private void addSiblingHtml(int index, String html) { Validate.notNull(html); Validate.notNull(parentNode); Element context = parent() instanceof Element ? (Element) parent() : null; List<Node> nodes = Parser.parseFragment(html, context, baseUri()); parentNode.addChildren(index, nodes.toArray(new Node[nodes.size()])); }
/** * Removes this node from the DOM, and moves its children up into the node's parent. This has the * effect of dropping the node but keeping its children. * * <p>For example, with the input html:<br> * {@code <div>One <span>Two <b>Three</b></span></div>}<br> * Calling {@code element.unwrap()} on the {@code span} element will result in the html:<br> * {@code <div>One Two <b>Three</b></div>}<br> * and the {@code "Two "} {@link TextNode} being returned. * * @return the first child of this node, after the node has been unwrapped. Null if the node had * no children. * @see #remove() * @see #wrap(String) */ public Node unwrap() { Validate.notNull(parentNode); int index = siblingIndex; Node firstChild = childNodes.size() > 0 ? childNodes.get(0) : null; parentNode.addChildren(index, this.childNodesAsArray()); this.remove(); return firstChild; }