From f5d3dede6b6aab06a5758ec847f9b29cda95f652 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Sat, 6 Dec 2025 18:19:44 +0100 Subject: [PATCH] node: textContent must ignore comments for elements --- src/browser/tests/node/text_content.html | 17 +++++++++++++---- src/browser/webapi/Node.zig | 17 +++++++++++++++-- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/browser/tests/node/text_content.html b/src/browser/tests/node/text_content.html index d6250320..fc6a0de9 100644 --- a/src/browser/tests/node/text_content.html +++ b/src/browser/tests/node/text_content.html @@ -1,6 +1,12 @@
d1

hello

+
+ + + This is a
+ text +
diff --git a/src/browser/webapi/Node.zig b/src/browser/webapi/Node.zig index 596dc554..2cb0d323 100644 --- a/src/browser/webapi/Node.zig +++ b/src/browser/webapi/Node.zig @@ -171,7 +171,20 @@ pub fn childNodes(self: *const Node, page: *Page) !*collections.ChildNodes { pub fn getTextContent(self: *Node, writer: *std.Io.Writer) error{WriteFailed}!void { switch (self._type) { - .element => |el| return el.getInnerText(writer), + .element => { + var it = self.childrenIterator(); + while (it.next()) |child| { + // ignore comments and TODO processing instructions. + switch (child._type) { + .cdata => |c| switch (c._type) { + .comment => continue, + .text => {}, + }, + else => {}, + } + try child.getTextContent(writer); + } + }, .cdata => |c| try writer.writeAll(c.getData()), .document => {}, .document_type => {}, @@ -719,7 +732,7 @@ pub const JsApi = struct { switch (self._type) { .element => |el| { var buf = std.Io.Writer.Allocating.init(page.call_arena); - try el.getInnerText(&buf.writer); + try el.asNode().getTextContent(&buf.writer); return buf.written(); }, .cdata => |cdata| return cdata.getData(),