我正在尝试使用 Cheerio 获取一些放置在单个文本之后的文本<br>
tag.
我已经尝试过以下几行:
let price = $(this).nextUntil('.col.search_price.discounted.responsive_secondrow').find('br').text().trim();
let price = $(this).nextUntil('.col.search_price.discounted.responsive_secondrow.br').text().trim();
这是我正在尝试抓取的 HTML:
<div class="col search_price_discount_combined responsive_secondrow" data-price-final="5039">
<div class="col search_discount responsive_secondrow">
<span>-90%</span>
</div>
<div class="col search_price discounted responsive_secondrow">
<span style="color: #888888;"><strike>ARS$ 503,99</strike></span><br>ARS$ 50,39
</div>
</div>
我想要获得“ARS$ 50,39”。
如果您愿意假设此文本是最后一个子元素,则可以使用.contents().last()
:
const cheerio = require("cheerio"); // 1.0.0-rc.12
const html = `
<div class="col search_price_discount_combined responsive_secondrow" data-price-final="5039">
<div class="col search_discount responsive_secondrow">
<span>-90%</span>
</div>
<div class="col search_price discounted responsive_secondrow">
<span style="color: #888888;"><strike>ARS$ 503,99</strike></span><br>ARS$ 50,39
</div>
</div>
`;
const $ = cheerio.load(html);
const sel = ".col.search_price.discounted.responsive_secondrow";
const text = $(sel).contents().last().text().trim();
console.log(text); // => ARS$ 50,39
如果您对这个假设不满意,您可以搜索子节点以查找第一个非空文本节点:
// ...
const text = $([...$(sel).contents()]
.find(e => e.type === "text" && $(e).text().trim()))
.text()
.trim();
console.log(text); // => ARS$ 50,39
如果文本节点紧跟在<br>
具体标记,你可以尝试:
// ...
const contents = [...$(sel).contents()];
const text = $(contents.find((e, i) =>
e.type === "text" && contents[i-1]?.tagName === "br"
))
.text()
.trim();
console.log(text); // => ARS$ 50,39
如果您想要所有直接文本子项,请参阅:
- 如何在 Cheerio 中获取由不同 HTML 标签分隔的文本 https://stackoverflow.com/questions/73690939/how-to-get-a-text-thats-separated-by-different-html-tags-in-cheerio/73692854#73692854
- Cheerio:获取普通+文本节点 https://stackoverflow.com/questions/54878673/cheerio-get-normal-text-nodes/73693773#73693773
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)