diff --git a/src/browser/webapi/HTMLDocument.zig b/src/browser/webapi/HTMLDocument.zig index d8e5a757f..5bb438baa 100644 --- a/src/browser/webapi/HTMLDocument.zig +++ b/src/browser/webapi/HTMLDocument.zig @@ -44,14 +44,17 @@ pub fn asEventTarget(self: *HTMLDocument) *@import("EventTarget.zig") { } // HTML-specific accessors -pub fn getHead(self: *HTMLDocument) ?*Element.Html.Head { +// The head is the first html-namespace child of the document element whose +// local name is head, whatever its Zig element type (e.g. a createElementNS +// "blah:head" is an HTMLUnknownElement but still qualifies). +pub fn getHead(self: *HTMLDocument) ?*Element { const doc_el = self._proto.getDocumentElement() orelse return null; var child = doc_el.asNode().firstChild(); - while (child) |node| { - if (node.is(Element.Html.Head)) |head| { - return head; + while (child) |node| : (child = node.nextSibling()) { + const el = node.is(Element) orelse continue; + if (el._namespace == .html and std.mem.eql(u8, el.getLocalName(), "head")) { + return el; } - child = node.nextSibling(); } return null; } diff --git a/src/browser/webapi/collections/node_live.zig b/src/browser/webapi/collections/node_live.zig index 79b4bf87f..800e5dc60 100644 --- a/src/browser/webapi/collections/node_live.zig +++ b/src/browser/webapi/collections/node_live.zig @@ -283,6 +283,8 @@ pub fn NodeLive(comptime mode: Mode) type { }, .name => { const el = node.is(Element) orelse return false; + // getElementsByName only considers HTML elements. + if (el._namespace != .html) return false; const name_attr = el.getAttributeSafe(comptime .wrap("name")) orelse return false; return std.mem.eql(u8, name_attr, self._filter); },