Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes #377, renders the html that can be manipulated with writer #399

Merged
merged 3 commits into from Oct 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 12 additions & 6 deletions utilities.go
Expand Up @@ -2,6 +2,7 @@ package goquery

import (
"bytes"
"io"

"golang.org/x/net/html"
)
Expand Down Expand Up @@ -57,6 +58,16 @@ func nodeName(node *html.Node) string {
}
}

// Render renders the html of the first element from selector and writes it to the writer.
// // It behaves the same as OuterHtml but writes to w instead of returning the string.
func Render(w io.Writer, s *Selection) error {
if s.Length() == 0 {
return nil
}
n := s.Get(0)
return html.Render(w, n)
}

// OuterHtml returns the outer HTML rendering of the first item in
// the selection - that is, the HTML including the first element's
// tag and attributes.
Expand All @@ -66,12 +77,7 @@ func nodeName(node *html.Node) string {
// a property provided by the DOM).
func OuterHtml(s *Selection) (string, error) {
var buf bytes.Buffer

if s.Length() == 0 {
return "", nil
}
n := s.Get(0)
if err := html.Render(&buf, n); err != nil {
if err := Render(&buf, s); err != nil {
return "", err
}
return buf.String(), nil
Expand Down
1 change: 0 additions & 1 deletion utilities_test.go
Expand Up @@ -80,7 +80,6 @@ func TestNodeNameMultiSel(t *testing.T) {
t.Errorf("want %v, got %v", in, out)
}
}

func TestOuterHtml(t *testing.T) {
doc, err := NewDocumentFromReader(strings.NewReader(allNodes))
if err != nil {
Expand Down