GoQuery 筛选器不返回预期结果



魔法互联网,

我正在尝试使用"github.com/PuerkitoBio/goquery"从html字符串过滤元素。不幸的是,过滤器函数没有返回预期的结果。我本希望得到一份所有文章的清单,但是……没有。

package main
import (
"fmt"
"os"
"strings"
"github.com/PuerkitoBio/goquery"
)
var html = `
<section>
<article>
<h1>Article 1</h1>
<p>Text for article #1</p>
</article>
<article>
<h1>Article 2</h1>
<p>Text for article #2</p>
</article>
</section>
`
func main() {
qHtml, err := goquery.NewDocumentFromReader(strings.NewReader(html))
if err != nil {
panic(err)
}
articles := qHtml.Filter(`article`)
fmt.Println(articles.Nodes)
goquery.Render(os.Stdout, articles)
}

你正在尝试过滤一个空的选区

从你的问题中我看到你想做的,你可以简单地用Find代替Filter。所以在你的例子中应该是:

articles := qHtml.Find("article")

一旦你有一个包含元素的选择,那么你可以使用Filter。例如,要获取第二篇文章,您可以这样做:

articles := qHtml.Find("article").Filter(":nth-child(2)")

要了解更多关于Filter的信息,请查看以下资源:

<<ul>
  • goquery文档/gh>jQueryFilter文档
  • jQueryFind

    文档PS:您也可以在单个选择器中组合Find特定的文章

    articles := qHtml.Find("article:nth-child(2)")
    

    doc

    Filter将匹配的元素集缩减为与选择器字符串匹配的元素集。它为这个匹配元素子集返回一个新的Selection对象。

    因为在Filter之前你没有匹配任何东西,这就是为什么你得到空结果,因为Filter没有匹配的元素。

    您必须首先匹配元素或获得Selection节点集,然后才能应用Filter

    要解决Filter的问题,可以使用FindFindMatcher

    searchStr := `article`
    articles := qHtml.Find(searchStr)
    articles := qHtml.FindMatcher(goquery.Single(searchStr))
    

    相关内容

    • 没有找到相关文章

    最新更新