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

JavaScript点击输入框修改同组嵌套图书图标问题求助

点击输入框修改所在组内图书图标问题解决

我希望点击输入框时修改对应的图书图标,目前使用代码var x = that.parentNode.parentNode.children[0].firstChild;无法获取目标元素。页面存在两个输入组,要求点击任意输入框仅修改其所在组内的图书图标,恳请帮忙解决该问题。

相关代码如下:

function show(that) {
  var x = that.parentNode.parentNode.children[0].firstChild;
  console.log(x);
}
<div>
  <div class="toggle-check-group" style="background:#bdeabd">
    <span>
        <a>
            <img src="book.png" /> Book
        </a>
    </span>
    <br />
    <label><input onclick="show(this)" /></label><br /><br />
    <label><input onclick="show(this)" /></label><br /><br />
    <label><input onclick="show(this)" /></label><br /><br />
    <label><input onclick="show(this)" /></label><br /><br />
  </div>
  <br /><br />
  <div class="toggle-check-group" style="background:#f9b9b9">
    <span>
        <a>
            <img src="book.png" /> Book
        </a>
    </span>
    <br />
    <label><input onclick="show(this)" /></label><br /><br />
    <label><input onclick="show(this)" /></label><br /><br />
    <label><input onclick="show(this)" /></label><br /><br />
    <label><input onclick="show(this)" /></label><br /><br />
  </div>
</div>

问题原因

原代码失效的核心点:

  1. 依赖固定DOM层级定位,结构稍有变动就会出错
  2. firstChild会优先获取文本节点(span内部的换行、空格都属于文本节点),而非目标img元素

解决方案

方案1:用closest精准定位父组(推荐)

利用closest()方法直接找到当前输入框所在的.toggle-check-group容器,再通过querySelector定位组内的图书图标,逻辑清晰且不受DOM层级小变动影响:

function show(that) {
  // 找到当前输入框所属的分组容器
  const group = that.closest('.toggle-check-group');
  // 在分组内找到目标img元素
  const bookImg = group.querySelector('span a img');
  
  console.log(bookImg);
  // 这里添加修改图标的逻辑,比如更换图片地址
  // bookImg.src = "new-book-icon.png";
}

方案2:兼容旧浏览器的层级查找

如果需要兼容不支持closest()的旧浏览器,可以通过逐层向上遍历父节点找到分组容器:

function show(that) {
  let currentNode = that.parentNode;
  // 向上遍历直到找到.toggle-check-group
  while (currentNode && !currentNode.classList.contains('toggle-check-group')) {
    currentNode = currentNode.parentNode;
  }
  
  if (currentNode) {
    const bookImg = currentNode.querySelector('span a img');
    console.log(bookImg);
    // 执行修改图标操作
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:25:19