You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery筛选无<img>的.coverimages元素并隐藏时出错求助

嘿,我一眼就发现问题所在啦!

你的代码之所以会把所有.coverimages元素都隐藏(包括那些带图片的),核心问题出在选择器的作用范围上:

在each循环的回调里,你写的$(".coverimages img")是在整个页面里全局查找所有带.coverimages类的元素下的<img>标签,而不是针对当前正在遍历的那一个.coverimages元素。

举个例子:如果你的页面里哪怕只有一个.coverimages包含图片,那$(".coverimages img").length就会大于0,这时候所有循环里的if条件都不成立,不会隐藏任何元素;但如果页面里完全没有.coverimages包含图片,这个长度就是0,所有.coverimages就都会被隐藏——这就是你遇到的情况(说不定你以为有的div带图片,但实际结构没匹配上?)。

修正后的代码

你需要在循环里用$(this)指代当前遍历的那个.coverimages元素,然后用.find()只查找它内部的图片:

$('.coverimages').each(function() {
  // 只找当前这个 .coverimages 里的 img
  if ($(this).find("img").length == 0) {
    $(this).hide();
  }
});

更简洁的写法(推荐)

其实jQuery可以不用手动写each循环,直接用过滤方法一步搞定,既简洁又不容易出错:

方法一:用filter过滤

$('.coverimages').filter(function() {
  return $(this).find('img').length === 0;
}).hide();

方法二:用:not(:has())选择器

$('.coverimages:not(:has(img))').hide();

这两种写法都能精准找到内部没有<img>标签的.coverimages元素,然后直接隐藏它们~

内容的提问来源于stack exchange,提问作者illibrarian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:03:55