diff options
Diffstat (limited to 'components/layout_2020/dom_traversal.rs')
-rw-r--r-- | components/layout_2020/dom_traversal.rs | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/components/layout_2020/dom_traversal.rs b/components/layout_2020/dom_traversal.rs index 8c666e6bf11..a8f5a17fc1d 100644 --- a/components/layout_2020/dom_traversal.rs +++ b/components/layout_2020/dom_traversal.rs @@ -87,14 +87,12 @@ fn traverse_children_of<'dom, Node>( { traverse_pseudo_element(WhichPseudoElement::Before, parent_element, context, handler); - let mut next = parent_element.first_child(); - while let Some(child) = next { + for child in iter_child_nodes(parent_element) { if let Some(contents) = child.as_text() { handler.handle_text(child, contents, &child.style(context)); } else if child.is_element() { traverse_element(child, context, handler); } - next = child.next_sibling(); } traverse_pseudo_element(WhichPseudoElement::After, parent_element, context, handler); @@ -485,3 +483,16 @@ where // for DOM descendants of elements with `display: none`. } } + +pub(crate) fn iter_child_nodes<'dom, Node>(parent: Node) -> impl Iterator<Item = Node> +where + Node: NodeExt<'dom>, +{ + let mut next = parent.first_child(); + std::iter::from_fn(move || { + next.map(|child| { + next = child.next_sibling(); + child + }) + }) +} |