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"=\"");