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;
}