如何选择链接元素之外的所有图像?
Playspec
答案 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()
使用此文档永远不会修改原始文件。