JSoup-选择不在链接内的图像

时间:2019-05-14 20:28:57

标签: java html css-selectors jsoup

如何选择链接元素之外的所有图像?

Playspec

1 个答案:

答案 0 :(得分:1)

好吧,所以这里的问题是:not(a) img仅需要<img>周围的一个元素,而不是包含<a>的{​​{1}}。例如,<img><body>相匹配。因此,您的选择器几乎匹配所有:not(a)标签。即使您将HTML字符串传递给没有<img>Jsoup.parse()标签的<body>。 Jsoup自动生成它。

假设我们具有以下HTML:

<html>

如果您只想排除<html> <body> <a><div><img id="a-div-img"></div></a> <a><img id="a-img"></a> <img id="img"> </body> </html> 中的直接<img>子级,则可以使用<a>作为选择器:

:not(a) > img

结果将是这样:

Elements images = document.select(":not(a) > img");

此问题是它还会打印示例的第一个<img id="a-div-img"> <img id="img"> ,它实际上在<img><a>)内部。如果这足以满足您的需求,则可以使用此解决方案。

使用纯CSS不可能从选择中排除所有#a-div-img标签(至少我还没有找到解决方案)。但是,您可以在选择所有<a>标签之前先从文档中删除所有<a>标签:

<img>

结果将是这样:

document.select("a").remove();
Elements images = document.select("img");

如果您需要未经修改的原始文档,则可以在之前使用<img id="img">

Document.clone()

使用此文档永远不会修改原始文件。