Skip to content

Commit effaeed

Browse files
committed
dom: Implement SetInnerHTML
1 parent a5276cf commit effaeed

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

dom/element.go

+9
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type Element interface {
3535
InsertAdjacentHTML(position string, text string) error
3636
OuterHTML() string
3737
InnerHTML() string
38+
SetInnerHTML(string) error
3839
TagName() string
3940
Matches(string) (bool, error)
4041
// unexported
@@ -112,6 +113,14 @@ func (e *element) InnerHTML() string {
112113
return writer.String()
113114
}
114115

116+
func (e *element) SetInnerHTML(html string) error {
117+
fragment, err := e.nodeDocument().parseFragment(strings.NewReader(html))
118+
if err == nil {
119+
err = e.ReplaceChildren(fragment)
120+
}
121+
return err
122+
}
123+
115124
func (e *element) HasAttribute(name string) bool {
116125
for _, a := range e.attributes {
117126
if a.Name() == name {

dom/element_test.go

+8
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,14 @@ func TestElementOuterHTML(t *testing.T) {
288288
</div>`))
289289
}
290290

291+
func TestSetElementInnerHTML(t *testing.T) {
292+
doc := ParseHtmlString(`<body>body text</body>`)
293+
doc.Body().SetInnerHTML(`<div id="1">Foo</div>Bar<div id="2">Baz</div>`)
294+
gomega.NewWithT(t).
295+
Expect(doc.Body().InnerHTML()).
296+
To(Equal(`<div id="1">Foo</div>Bar<div id="2">Baz</div>`))
297+
}
298+
291299
// ParentElementTestSuite describes functionality in the ParentNode IDL
292300
// interface mixin, which is used by both Element, Document, and
293301
// DocumentFragment.

0 commit comments

Comments
 (0)