diff --git a/src/browser/tests/element/inner.html b/src/browser/tests/element/inner.html
index 2c93a717..ada3f7c1 100644
--- a/src/browser/tests/element/inner.html
+++ b/src/browser/tests/element/inner.html
@@ -172,5 +172,5 @@
// TODO innerText is not rendered correctly for now.
//testing.expectEqual("This is a\ntext", d2.innerText);
- testing.expectEqual(" This is a \n text", d2.innerText);
+ testing.expectEqual(" This is a \n text ", d2.innerText);
diff --git a/src/browser/webapi/CData.zig b/src/browser/webapi/CData.zig
index 507031af..b1c78b03 100644
--- a/src/browser/webapi/CData.zig
+++ b/src/browser/webapi/CData.zig
@@ -102,7 +102,8 @@ pub fn render(self: *const CData, writer: *std.io.Writer, opts: RenderOpts) !voi
// Write the reminder chunk.
if (is_w) {
// Last chunk is whitespaces.
- if (opts.trim_right == false) {
+ // If the string contains only whitespaces, don't write it.
+ if (start > 0 and opts.trim_right == false) {
try writer.writeByte(' ');
}
} else {
@@ -285,6 +286,8 @@ test "WebApi: CData.render" {
};
const test_cases = [_]TestCase{
+ .{ .value = " ", .expected = "" },
+ .{ .value = " ", .expected = "", .opts = .{ .trim_left = false, .trim_right = false } },
.{ .value = "foo bar", .expected = "foo bar" },
.{ .value = "foo bar", .expected = "foo bar" },
.{ .value = " foo bar", .expected = "foo bar" },
diff --git a/src/browser/webapi/Element.zig b/src/browser/webapi/Element.zig
index b40791b5..4d50051d 100644
--- a/src/browser/webapi/Element.zig
+++ b/src/browser/webapi/Element.zig
@@ -239,7 +239,7 @@ pub fn getInnerText(self: *Element, writer: *std.Io.Writer) !void {
},
.cdata => |c| switch (c._type) {
.comment => continue,
- .text => try c.render(writer, .{}),
+ .text => try c.render(writer, .{ .trim_right = false, .trim_left = false }),
},
.document => {},
.document_type => {},