@@ -26,6 +26,7 @@ const checkCases = jsruntime.test_utils.checkCases;
2626
2727const Element = @import ("../dom/element.zig" ).Element ;
2828const URL = @import ("../url/url.zig" ).URL ;
29+ const Node = @import ("../dom/node.zig" ).Node ;
2930
3031// HTMLElement interfaces
3132pub const Interfaces = .{
@@ -117,6 +118,25 @@ pub const HTMLElement = struct {
117118 pub fn get_style (_ : * parser.ElementHTML ) CSSProperties {
118119 return .{};
119120 }
121+
122+ pub fn get_innerText (e : * parser.ElementHTML ) ! []const u8 {
123+ const n = @as (* parser .Node , @ptrCast (e ));
124+ return try parser .nodeTextContent (n ) orelse "" ;
125+ }
126+
127+ pub fn set_innerText (e : * parser.ElementHTML , s : []const u8 ) ! void {
128+ const n = @as (* parser .Node , @ptrCast (e ));
129+
130+ // create text node.
131+ const doc = try parser .nodeOwnerDocument (n ) orelse return error .NoDocument ;
132+ const t = try parser .documentCreateTextNode (doc , s );
133+
134+ // remove existing children.
135+ try Node .removeChildren (n );
136+
137+ // attach the text node.
138+ _ = try parser .nodeAppendChild (n , @as (* parser .Node , @ptrCast (t )));
139+ }
120140};
121141
122142// Deprecated HTMLElements in Chrome (2023/03/15)
@@ -1068,4 +1088,12 @@ pub fn testExecFn(
10681088 .{ .src = "script.async" , .ex = "false" },
10691089 };
10701090 try checkCases (js_env , & script );
1091+
1092+ var innertext = [_ ]Case {
1093+ .{ .src = "const backup = document.getElementById('content')" , .ex = "undefined" },
1094+ .{ .src = "document.getElementById('content').innerText = 'foo';" , .ex = "foo" },
1095+ .{ .src = "document.getElementById('content').innerText" , .ex = "foo" },
1096+ .{ .src = "document.getElementById('content').innerHTML = backup; true;" , .ex = "true" },
1097+ };
1098+ try checkCases (js_env , & innertext );
10711099}
0 commit comments