diff --git a/scraper/src/element_ref/mod.rs b/scraper/src/element_ref/mod.rs index b00dd8f2..7b2341f2 100644 --- a/scraper/src/element_ref/mod.rs +++ b/scraper/src/element_ref/mod.rs @@ -70,7 +70,12 @@ impl<'a> ElementRef<'a> { /// Returns the inner HTML of this element. pub fn inner_html(&self) -> String { - self.serialize(TraversalScope::ChildrenOnly(None)) + // Pass this element as the parent so that its text is escaped as in `html()`, i.e. not at + // all in `"); + assert_eq!(first(&html, "style").inner_html(), "a > b"); + assert_eq!(first(&html, "script").inner_html(), "1 < 2"); + } + + #[test] + fn inner_html_nested_raw_text() { + let html = Html::parse_document( + r#"
x & y
"#, + ); + assert_eq!( + first(&html, "div").inner_html(), + r#"x & y"# + ); + assert_eq!( + first(&html, "span").inner_html(), + r#"x & y"# + ); + assert_eq!( + first(&html, "script").inner_html(), + "if (a < b && c > d) {}" + ); + } } diff --git a/scraper/src/node/serializable.rs b/scraper/src/node/serializable.rs index 724dedf2..67ec2d9d 100644 --- a/scraper/src/node/serializable.rs +++ b/scraper/src/node/serializable.rs @@ -14,7 +14,7 @@ pub(crate) fn serialize( for edge in self_node.traverse() { match edge { Edge::Open(node) => { - if node == self_node && traversal_scope == TraversalScope::ChildrenOnly(None) { + if node == self_node && matches!(traversal_scope, TraversalScope::ChildrenOnly(_)) { continue; } @@ -37,7 +37,7 @@ pub(crate) fn serialize( } Edge::Close(node) => { - if node == self_node && traversal_scope == TraversalScope::ChildrenOnly(None) { + if node == self_node && matches!(traversal_scope, TraversalScope::ChildrenOnly(_)) { continue; }