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

标签 java html css-selectors jsoup

如何选择不在链接元素内的所有图像?

document.select("a img"); //selects all images inside a link
document.select(":not(a) img"); //images not inside a link (does not work)

最佳答案

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

假设我们有以下 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>中的 child 您可以使用:not(a) > img作为选择器:

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

结果将是这样的:

<img id="a-div-img">
<img id="img">

问题在于它还打印了第一个 <img>该示例实际上位于 <a> 内(#a-div-img)。如果这足以满足您的需求,您可以采用此解决方案。

排除所有<a>使用纯 CSS 不可能从选择中添加标签(至少我还没有找到解决方案)。但你可以删除所有 <a>选择所有 <img> 之前从文档中标记标签:

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

结果将是这样的:

<img id="img">

如果您需要未经修改的原始文档,可以使用Document.clone()之前:

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

使用它,原始文档永远不会被修改。

关于java - JSoup - 选择不在链接内的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56138153/

相关文章:

java - 如何在运行 Aeron 示例时设置 Aeron 订阅者和发布者数量限制

html - 区分平板电脑和上网本的 CSS 媒体查询

css - 无法使用 BS4 找到 css 选择器

css - 为每个 CSS 样式导入预先编写的规则或编写自己的规则 (OOCSS) 哪个更好?

php - PHP 中是否有 JQuery DOM 操作/CSS 选择器等效类?

java - java中比较两个不同大小数组的元素并返回 boolean 数组

java - ImageView 仅显示循环中的最后一张图像

Java 7,尝试资源 : can i omit creating Connection and PreparedStatement?

html - 如果 float 图像不存在,则标题宽度应调整

html - 在 Bootstrap 网格中将矩形缩略图设为正方形以获得大屏幕尺寸