Node.js中使用Cheerio如何选择多个同类元素中的指定元素
问题原因
find(".class1").find("a")[1] 获取到的是未经过Cheerio封装的原生DOM节点,本身不包含attr方法,所以你原来的写法无法正常拿到属性值。
推荐实现方案
直接使用Cheerio内置的eq()方法按索引筛选元素,该方法返回的是封装完成的Cheerio实例,可直接调用attr读取属性。注意索引从0开始计数,你需要的第二个a标签对应索引1,写法如下:
$(".class1").find("a").eq(1).attr("href")
其他兼容写法
如果你更习惯用方括号索引取节点的写法,也可以把取到的原生DOM节点重新用Cheerio包裹后再读取属性:
const aNodes = $(".class1").find("a") const targetHref = $(aNodes[1]).attr("href")
补充说明
如果后续页面结构调整,a标签的顺序不固定,你也可以通过文本匹配定位元素,比如匹配文本为Some random text的第二个a标签:
$(".class1 a:contains('Some random text')").eq(1).attr("href")
内容的提问来源于stack exchange,提问作者Venkat Lohith Dasari
相关产品推荐
相关产品推荐

