diff --git a/src/rewritable_units/element.rs b/src/rewritable_units/element.rs index c796ee01..a0be639a 100644 --- a/src/rewritable_units/element.rs +++ b/src/rewritable_units/element.rs @@ -1593,6 +1593,26 @@ mod tests { ); } + #[test] + fn add_valueless_attr() { + test!( + |el| { + el.set_attribute("a5", "").unwrap(); + }, + r#""# + ); + } + + #[test] + fn clear_value_to_valueless_attr() { + test!( + |el| { + el.set_attribute("a2", "").unwrap(); + }, + r#""# + ); + } + #[test] fn self_closing_flag() { // NOTE: we should add space between valueless attr and self-closing slash diff --git a/src/rewritable_units/tokens/attributes.rs b/src/rewritable_units/tokens/attributes.rs index cdb3e1d7..7a8ed559 100644 --- a/src/rewritable_units/tokens/attributes.rs +++ b/src/rewritable_units/tokens/attributes.rs @@ -144,6 +144,8 @@ impl Serialize for &Attribute<'_> { fn into_bytes(self, output_handler: &mut dyn FnMut(&[u8])) -> Result<(), RewritingError> { if let Some(raw) = self.raw.as_ref() { output_handler(raw); + } else if self.value.is_empty() { + output_handler(&self.name); } else { output_handler(&self.name); output_handler(b"=\"");