为了账号安全,请及时绑定邮箱和手机立即绑定

如何确定选择器是在第一个还是最后一个位置

如何确定选择器是在第一个还是最后一个位置

Go
慕的地8271018 2023-06-19 11:10:09
我使用goquery 的函数.Each()递归到子元素中。有没有办法找出这是否是父母的第一个(或最后一个)孩子?我尝试删除 HTML 节点的开始和尾随空格。检查第一个孩子可能是一个测试问题i == 0。但是最后一个子元素呢?到目前为止,这是我的代码:package mainimport (    "fmt"    "io"    "os"    "strings"    "github.com/PuerkitoBio/goquery")// recursive functionfunc dumpElement(i int, sel *goquery.Selection) {    fmt.Println("dump Element - is this the first or last element? I don't know")    sel.Contents().Each(dumpElement)}func startRecursion(r io.Reader) error {    g, err := goquery.NewDocumentFromReader(r)    if err != nil {        return err    }    g.Find(":root > body").Each(dumpElement)    return nil}func main() {    doc := `<!DOCTYPE html>    <html><head><title>foo</title></head><body>    <div class="bla">foo <b> bar </b> baz</div>    </body></html>`    if err := startRecursion(strings.NewReader(doc)); err != nil {        os.Exit(-1)    }}
查看完整描述

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

您很可能必须编写一个函数来返回您正在使用的函数,这样您就可以访问原始选择长度,例如:


type iterator func(int, *goquery.Selection)


func dumpElementFrom(s *goquery.Selection) iterator {

    lastIndex := s.Size() - 1

    return func(i int, sel *goquery.Selection) {

        if i == lastIndex {

            fmt.Println("Last Element")

        }

        sel.Contents().Each(dumpElement)

    }

}



func startRecursion(r io.Reader) error {

    g, err := goquery.NewDocumentFromReader(r)

    if err != nil {

        return err

    }


    g.Find(":root > body").Each(dumpElementFrom(g))

    return nil

}


查看完整回答
反对 回复 2023-06-19
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号