使用Cheeriojs提取第二个select的option文本与属性的问题排查
问题排查与修正
你的代码存在两个核心问题:
each()方法不会返回回调里创建的对象数组,它仅负责遍历元素,返回的仍是原Cheerio DOM集合,所以你最终拿到的不是目标数据数组- 选择器逻辑不严谨:先获取所有select的option再
slice(2),完全依赖第一个select的option数量固定为2,一旦数量变化就会出错,应该直接定位第二个select
修正后的代码
// 精准定位第二个select(索引从0开始,第二个对应eq(1)),再获取其下的option const eps = $('select').eq(1) .find('option') .map((_, op) => ({ ep: $(op).text().trim(), // 加trim()去除文本前后空白 url: $(op).attr('value'), select: 1 })) .get(); // 将Cheerio集合转为普通JS数组 console.log(eps);
关键说明
eq(1):直接选中第二个<select>元素,避免依赖第一个select的option数量map():和each()不同,map()会收集回调返回的对象,生成新的Cheerio集合get():把Cheerio集合转换成标准JavaScript数组,得到预期的对象数组
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

