Как получить полный HTML-код дочернего элемента с помощью goquery? - PullRequest
0 голосов
/ 23 февраля 2019

Почему следующий тест не пройден?

func TestGetFirstElementHtml(t *testing.T) {
    test := `<speak><p>My paragraph</p></speak>`
    doc, _ := goquery.NewDocumentFromReader(strings.NewReader(test))
    var childrenHtml []string
    doc.Find("speak").Children().Each(func(i int, s *goquery.Selection) {
        html, _ := s.Html()
        childrenHtml = append(childrenHtml, html)
    })
    if childrenHtml[0] != "<p>My paragraph</p>" {
        t.Fatalf("First element html is not valid: '%s'", childrenHtml[0])
    }
}

Это результат теста:

=== FAIL: . TestGetFirstElementHtml (0.00s)
    main_test.go:45: First element html is not valid: 'My paragraph'

Другими словами, как я могу получить полный HTML-код первого потомкаучитывая, что я не могу предсказать, какой элемент HTML это дочерний элемент?

1 Ответ

0 голосов
/ 23 февраля 2019

На самом деле вам нужен внешний HTML, и вы можете получить его, вызвав функцию goquery.OuterHTML.Согласно документу:

func OuterHtml(s *Selection) (string, error)

OuterHtml возвращает внешний HTML-рендеринг первого элемента в выделении, то есть HTML, включающий тег и атрибуты первого элемента.

В отличие отInnerHtml, это функция, а не метод в Selection, потому что это не метод jQuery (в javascript-land это свойство, предоставляемое DOM).

Так что просто изменитестрока:

html, _ := goquery.OuterHTML(s)
...