From ade5b4688b44d5ffecfa3f4d0ef679c5b05c1add Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Wed, 11 Nov 2026 13:34:57 +0000 Subject: [PATCH] Don't escape script and style text in inner_html inner_html() serialized with ChildrenOnly(None), so html5ever saw the children's text without a parent and escaped it, even inside "); + 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; }