Не работает экстрактор выбора GoQuery

Я пытаюсь извлечь целевой атрибут и добавить его к фрагменту из фрагмента HTML.

<div class="pagination pagination-responsive">
      <ul class="list-unstyled"> 
          <li class="active">
             <a rel="start" target="1" href="/s/Cambridge--MA--United-States">1</a>
          </li> 
          <li>
             <a rel="next" target="2" href="/s/Cambridge--MA--United-States?page=2">2</a>
          </li> 
          <li>
              <a target="3" href="/s/Cambridge--MA--United-States?page=3">3</a>
          </li> 
          <li class="gap"><span class="gap">&hellip;</span>
          </li> 
          <li>
            <a target="17" href="/s/Cambridge--MA--United-States?page=17">17</a>
          </li> 
          <li class="next next_page"><a target="2" rel="next" href="/s/Cambridge--MA--United-States?page=2">
          <span class="screen-reader-only">Next</span><i class="icon icon-caret-right"></i></a>
          </li>
        </ul>
        </div>
    </div>

pageCounts := doc.Find(".pagination-responsive .list-unstyled")
    for page := range pageCounts.Nodes {
        pageIterator := pageCounts.Eq(page)
        li := pageIterator.Find("li a")
        href, _ := li.Attr("target")
        fmt.Println(href)
    }

Может кто-нибудь указать, что мне здесь не хватает?

1 ответ

Решение

li := pageIterator.Find("li a") на самом деле последовательность элементов, но вы берете только атрибут первого. Это как jquery в этом отношении. То, что вы действительно хотите сделать, это перебрать все ссылки, и Each будет твоим другом здесь. Я считаю, что это гораздо проще, чем итерация с формулой.

Этот фрагмент работает для меня:

var html = `
<div class="pagination pagination-responsive">
      <ul class="list-unstyled"> 
          <li class="active">
             <a rel="start" target="1" href="/s/Cambridge--MA--United-States">1</a>
          </li> 
          <li>
             <a rel="next" target="2" href="/s/Cambridge--MA--United-States?page=2">2</a>
          </li> 
          <li>
              <a target="3" href="/s/Cambridge--MA--United-States?page=3">3</a>
          </li> 
          <li class="gap"><span class="gap">&hellip;</span>
          </li> 
          <li>
            <a target="17" href="/s/Cambridge--MA--United-States?page=17">17</a>
          </li> 
          <li class="next next_page"><a target="2" rel="next" href="/s/Cambridge--MA--United-States?page=2">
          <span class="screen-reader-only">Next</span><i class="icon icon-caret-right"></i></a>
          </li>
        </ul>
        </div>
    </div>

`

func main() {
    doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
    pageCounts := doc.Find(".pagination-responsive .list-unstyled")
    pageCounts.Each(func(_ int, ul *goquery.Selection) {
        links := ul.Find("li a")
        links.Each(func(_ int, li *goquery.Selection) {
            if val, ok := li.Attr("target"); ok {
                fmt.Println(val)
            }
        })
    })
}
Другие вопросы по тегам