diff --git a/src/browser/tests/domparser.html b/src/browser/tests/domparser.html
index 24d34e89..7930ec87 100644
--- a/src/browser/tests/domparser.html
+++ b/src/browser/tests/domparser.html
@@ -397,3 +397,25 @@
}
}
+
+
diff --git a/src/browser/webapi/collections/node_live.zig b/src/browser/webapi/collections/node_live.zig
index 65fdfbf7..a55420e7 100644
--- a/src/browser/webapi/collections/node_live.zig
+++ b/src/browser/webapi/collections/node_live.zig
@@ -219,7 +219,14 @@ pub fn NodeLive(comptime mode: Mode) type {
switch (mode) {
.tag => {
const el = node.is(Element) orelse return false;
- return el.getTag() == self._filter;
+ // For HTML namespace elements, we can use the optimized tag comparison.
+ // For other namespaces (XML, SVG custom elements, etc.), fall back to string comparison.
+ if (el._namespace == .html) {
+ return el.getTag() == self._filter;
+ }
+ // For non-HTML elements, compare by tag name string
+ const element_tag = el.getTagNameLower();
+ return std.mem.eql(u8, element_tag, @tagName(self._filter));
},
.tag_name => {
// If we're in `tag_name` mode, then the tag_name isn't