Hickory选择器完全攻略:掌握CSS风格DOM节点查询技巧

发布时间:2026/9/27 4:07:50

Hickory选择器完全攻略:掌握CSS风格DOM节点查询技巧 Hickory选择器完全攻略掌握CSS风格DOM节点查询技巧【免费下载链接】hickoryHTML as data项目地址: https://gitcode.com/gh_mirrors/hic/hickoryHickory是一个强大的HTML解析与处理库它提供了类似CSS选择器的API让开发者能够以声明式方式查询和操作HTML文档。本文将详细介绍Hickory选择器的核心功能、使用方法和最佳实践帮助你轻松掌握这一高效的DOM节点查询工具。快速入门Hickory选择器基础Hickory选择器模块位于src/cljc/hickory/select.cljc它实现了大部分CSS选择器功能并提供了Clojure风格的API。使用Hickory选择器通常分为三个步骤解析HTML使用hickory/parse将HTML字符串转换为Hickory数据结构创建选择器使用选择器函数如tag、id、class等组合成查询条件执行查询使用select/select函数应用选择器并获取结果以下是一个简单示例演示如何选择所有div元素(require [hickory.core :as hickory] [hickory.select :as select]) (let [html divfoo/divdivbar/div htree (hickory/as-hickory (hickory/parse html))] (select/select (select/tag :div) htree))核心选择器详解元素选择器精准定位标签tag选择器用于匹配指定标签名的元素支持字符串或关键字参数且不区分大小写;; 匹配所有p标签 (select/tag :p) (select/tag P) ; 同样有效在测试文件test/cljc/hickory/test/select.cljc中我们可以看到tag选择器的实际应用;; 选择所有h1标签 (let [selection (select/select (select/tag h1) htree)] (is (and ( 1 (count selection)) ( :h1 (- selection first :tag)))))ID选择器唯一元素定位id选择器通过元素的id属性进行精确匹配同样不区分大小写;; 匹配id为user-profile的元素 (select/id user-profile) (select/id :user-profile) ; 关键字形式也支持类选择器样式类匹配class选择器用于匹配具有指定CSS类的元素;; 匹配所有包含active类的元素 (select/class active)Hickory会自动解析class属性中的多个类名因此以下HTML元素可以被(select/class cool)匹配div classaclass bclass cool.../div属性选择器灵活的属性匹配attr选择器提供了强大的属性匹配能力支持存在性检查和值匹配;; 匹配所有具有disabled属性的元素 (select/attr :disabled) ;; 匹配href属性值为https://example.com的元素 (select/attr :href #( % https://example.com)) ;; 匹配data-role属性值以button-开头的元素 (select/attr :data-role #(string/starts-with? % button-))组合选择器构建复杂查询后代选择器层级关系匹配descendant选择器用于匹配某个元素的后代元素无论中间隔多少层级;; 匹配div内所有的span元素 (select/descendant (select/tag :div) (select/tag :span))与CSS中的div span选择器等效它会匹配以下结构中的所有spandiv span直接子元素/span pspan间接子元素/span/p /div子选择器直接层级匹配child选择器仅匹配直接子元素与CSS中的运算符类似;; 仅匹配div的直接子元素中的span (select/child (select/tag :div) (select/tag :span))这个选择器不会匹配上例中p内的span元素。相邻兄弟选择器紧接其后的元素follow-adjacent选择器匹配紧随目标元素之后的兄弟元素;; 匹配div后面紧接的p元素 (select/follow-adjacent (select/tag :div) (select/tag :p))等效于CSS中的div p选择器。通用兄弟选择器后续所有兄弟follow选择器匹配目标元素之后的所有兄弟元素无论是否紧接;; 匹配div之后的所有p兄弟元素 (select/follow (select/tag :div) (select/tag :p))等效于CSS中的div ~ p选择器。伪类选择器高级匹配逻辑位置伪类nth-child系列Hickory提供了丰富的位置伪类选择器用于按位置选择元素;; 选择第2个子元素 (select/nth-child 2) ;; 选择奇数位置的子元素 (select/nth-child :odd) ;; 选择偶数位置的子元素 (select/nth-child :even) ;; 选择倒数第3个子元素 (select/nth-last-child 3)在测试文件中我们可以看到这些选择器的实际应用;; 选择偶数位置的元素 (let [selection (select/select (select/and (select/node-type :element) (select/nth-child :even)) htree)] (is (and ( 4 (count selection)) ( :element (- selection first :type)))))逻辑组合and、or、notHickory提供了逻辑组合选择器用于构建复杂条件;; 匹配class为active且id为menu的div元素 (select/and (select/tag :div) (select/class active) (select/id menu)) ;; 匹配div或span元素 (select/or (select/tag :div) (select/tag :span)) ;; 匹配不是p元素的所有元素 (select/not (select/tag :p))实战技巧组合使用选择器复杂查询示例结合多种选择器可以构建强大的查询逻辑。例如选择所有包含item类且data-status属性为completed的div元素这些元素是ul的直接子元素(select/child (select/tag :ul) (select/and (select/tag :div) (select/class item) (select/attr :data-status #( % completed))))性能优化建议从具体到抽象优先使用id、tag等高效选择器再添加类和属性条件限制范围使用child而非descendant减少匹配范围组合条件使用and尽早排除不匹配元素总结Hickory选择器的优势Hickory选择器为Clojure开发者提供了强大而灵活的HTML查询能力其主要优势包括CSS兼容性支持大部分CSS选择器语法降低学习成本函数式API符合Clojure风格支持组合和高阶函数跨平台在Clojure、ClojureScript中均可使用精确控制提供比CSS更细粒度的控制选项通过本文介绍的选择器功能你可以轻松处理各种HTML文档查询需求。要深入了解更多选择器和高级用法请参考Hickory源代码中的src/cljc/hickory/select.cljc文件和测试用例test/cljc/hickory/test/select.cljc。开始使用Hickory选择器体验函数式HTML处理的强大魅力吧【免费下载链接】hickoryHTML as data项目地址: https://gitcode.com/gh_mirrors/hic/hickory创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/19 20:11:36

使用CS Roofline Toolkit测量带宽

使用CS Roofline Toolkit测量带宽 工程下载:使用CS Roofline Toolkit测量带宽-案例工程文件,也可以按照下面的说明使用git clone下载 目录使用CS Roofline Toolkit测量带宽0、Roofline模型理解1、CS Roofline Toolkit下载1.1、设置网络1.2、git clone下…

2026/9/27 4:05:58

2026年精选最值得推荐的5款降AI率平台

2026 年毕业季临近,各大高校对论文 AIGC 检测的审核标准愈发严格。面对市场上五花八门的降 AI 工具,你是否也在困惑到底该选哪个?为了帮助大家厘清思路,我耗时两周,对当前市面上主流的 5 款降 AI 工具进行了实测对比。…

2026/9/27 4:05:58

网站主页面设计哪个好:懂行老板的5档报价与最佳实践

网站主页面设计哪个好:懂行老板的5档报价与最佳实践 自己不会代码想做网站,却总被“首页设计哪个好”这种问题绕晕?别急,这恰恰是90%中小企业老板踩坑的起点。真正懂行的做法,不是纠结“哪个好看”,而是先明确:…

2026/9/27 4:05:58

CANoe新手入门:从安装配置到报文分析实战全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 4:05:58

电流平均值、RMS与AC值的本质区别与工程应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 4:00:58

基于STM32的智能鸽子驯养系统:嵌入式开发全流程实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑