贝利信息

使用 goquery 精确匹配多类名 HTML 元素的正确方法

日期:2026-01-08 00:00 / 作者:聖光之護

在使用 goquery 选择 html 元素时,若 class 属性包含空格(如 `class="text title"`),需理解其语义为**多个独立类名**;正确写法是用 `.text.title`(无空格、连续点号)匹配同时具有这两个类的元素,而非 `.text title`(后者表示后代选择器)。

HTML 规范明确规定:class 属性值是一个以空格分隔的类名列表。例如 表示该元素同时拥有 text 和 title 两个 CSS 类。因此,在 CSS 选择器(以及 goquery 所依赖的 CSS 选择器语法)中:

回到原始示例,以下代码可正确提取 Go

doc.Find(".text.title").Each(func(i int, s *goquery.Selection) {
    class, _ := s.Attr("class")
    fmt.Printf("class=%q, text=%q\n", class, s.Text()) // 输出:class="text title", text="Go "
})

⚠️ 注意事项:

总结:掌握 HTML class 属性的多值本质与 CSS 选择器的点号连接规则,是高效使用 goquery 的关键基础——空格是类名分隔符,不是类名的一部分;点号连接才是多类联合选择的正确语法。