diff --git a/src/browser/dom/element.zig b/src/browser/dom/element.zig
index 12e5f39dd..2b7482936 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 7c9286acd..db0c56b08 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 });
}
}
}