From 2a4feb7bee2168c7effe9a77ad6ec86a39ad6faa Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Fri, 30 May 2025 13:32:29 +0800 Subject: [PATCH] Fix set_innerHTML, fix HTMLCollection fixed (postAttached) return type --- src/browser/dom/element.zig | 14 ++++++++++---- src/browser/dom/html_collection.zig | 5 +++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/browser/dom/element.zig b/src/browser/dom/element.zig index 12e5f39d..2b748293 100644 --- a/src/browser/dom/element.zig +++ b/src/browser/dom/element.zig @@ -128,10 +128,10 @@ pub const Element = struct { // append children to the node const ln = try parser.nodeListLength(children); - var i: u32 = 0; - while (i < ln) { - defer i += 1; - const child = try parser.nodeListItem(children, i) orelse continue; + for (0..ln) |_| { + // always index 0, because ndoeAppendChild moves the node out of + // the nodeList and into the new tree + const child = try parser.nodeListItem(children, 0) orelse continue; _ = try parser.nodeAppendChild(node, child); } } @@ -653,4 +653,10 @@ test "Browser.DOM.Element" { .{ "a1.after('over 9000', a1_a);", "undefined" }, .{ "after_container.innerHTML", "
over 9000

" }, }, .{}); + + try runner.testCases(&.{ + .{ "var div1 = document.createElement('div');", null }, + .{ "div1.innerHTML = \"
a\"", null }, + .{ "div1.getElementsByTagName('a').length", "1" }, + }, .{}); } diff --git a/src/browser/dom/html_collection.zig b/src/browser/dom/html_collection.zig index 7c9286ac..db0c56b0 100644 --- a/src/browser/dom/html_collection.zig +++ b/src/browser/dom/html_collection.zig @@ -432,7 +432,8 @@ pub const HTMLCollection = struct { for (0..len) |i| { const node = try self.item(@intCast(i)) orelse unreachable; const e = @as(*parser.Element, @ptrCast(node)); - try js_this.setIndex(@intCast(i), e, .{}); + const as_interface = try Element.toInterface(e); + try js_this.setIndex(@intCast(i), as_interface, .{}); if (try item_name(e)) |name| { // Even though an entry might have an empty id, the spec says @@ -440,7 +441,7 @@ pub const HTMLCollection = struct { if (name.len > 0) { // Named fields should not be enumerable (it is defined with // the LegacyUnenumerableNamedProperties flag.) - try js_this.set(name, e, .{ .DONT_ENUM = true }); + try js_this.set(name, as_interface, .{ .DONT_ENUM = true }); } } }