Merge pull request #899 from lightpanda-io/element_remove

Add element.remove()  (needed by reddit)
This commit is contained in:
Karl Seguin
2025-07-17 21:44:08 +08:00
committed by GitHub

View File

@@ -508,6 +508,16 @@ pub const Element = struct {
_ = opts; _ = opts;
return Animation.constructor(effect, null); return Animation.constructor(effect, null);
} }
pub fn _remove(self: *parser.Element) !void {
// TODO: This hasn't been tested to make sure all references to this
// node are properly updated. A lot of libdom is lazy and will look
// for related elements JIT by walking the tree, but there could be
// cases in libdom or the Zig WebAPI where this reference is kept
const as_node: *parser.Node = @ptrCast(self);
const parent = try parser.nodeParentNode(as_node) orelse return;
_ = try Node._removeChild(parent, as_node);
}
}; };
// Tests // Tests
@@ -767,4 +777,13 @@ test "Browser.DOM.Element" {
.{ "fc; (fc = document.createElement('div')).innerHTML = '<script><\\/script><p>hello</p>'", null }, .{ "fc; (fc = document.createElement('div')).innerHTML = '<script><\\/script><p>hello</p>'", null },
.{ "fc.outerHTML", "<div><script></script><p>hello</p></div>" }, .{ "fc.outerHTML", "<div><script></script><p>hello</p></div>" },
}, .{}); }, .{});
try runner.testCases(&.{
.{ "const rm = document.createElement('div')", null },
.{ "rm.id = 'to-remove'", null },
.{ "document.getElementsByTagName('body')[0].appendChild(rm)", null },
.{ "document.getElementById('to-remove') != null", "true" },
.{ "rm.remove()", "undefined" },
.{ "document.getElementById('to-remove') != null", "false" },
}, .{});
} }