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

不用jQuery实现点击元素后隐藏最近.fave_icon元素的问题

解决点击图标后隐藏最近.fave_icon元素的问题

看起来你的图标切换逻辑完全没问题,但隐藏.fave_icon的部分失效,大概率是closest()方法的使用场景不对——这个方法只会查找当前元素的祖先节点(从自身开始往上遍历DOM树)。如果你的.fave_icon并不是目标图标的祖先元素(比如是兄弟元素、子元素),那自然找不到对应的DOM节点。

常见场景的修复方案

1. 如果.fave_icon是目标图标的兄弟元素

比如DOM结构是这样的:

<div class="item">
  <img src="Iconos/tacho.png" onclick="trash(event, this)">
  <img class="fave_icon" src="Iconos/heart.png">
</div>

这种情况下,你需要先找到父元素,再通过父元素查询.fave_icon:

function trash(event, trashcan){
  event.stopPropagation();
  if (trashcan.getAttribute('src') === "Iconos/tacho.png") {
    trashcan.src = "Iconos/warning.png"; 
    // 先获取父元素,再查找内部的.fave_icon
    const heart = trashcan.parentElement.querySelector(".fave_icon");
    // 先判断元素是否存在,避免控制台报错
    if (heart) {
      heart.style.visibility = "hidden";
    } else {
      console.log("未找到.fave_icon元素,请检查DOM结构");
    }
  }
}

2. 如果.fave_icon是目标图标的后代元素

如果.fave_icon在trashcan内部,直接用querySelector查找后代即可:

const heart = trashcan.querySelector(".fave_icon");

3. 如果.fave_icon确实是目标图标的祖先元素

那可能是选择器拼写错误,或者元素还没加载完成。建议先加调试语句确认:

console.log(trashcan.closest(".fave_icon")); // 如果输出null,说明找不到元素

检查.fave_icon的类名是否正确,或者确保函数执行时DOM已经渲染完成。

额外提示

  • 尽量用===代替==做严格相等判断,避免类型转换带来的意外问题。
  • 操作DOM前先判断元素是否存在,能避免不必要的控制台报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:23:32