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

点击按钮后文本无法显示在最近的.msg元素,仅显示在首个.msg元素求助

问题解决:点击按钮将文本显示到对应.msg元素

你的问题出在document.querySelector('.msg')——这个方法只会返回页面中第一个匹配.msg类的元素,所以不管点击哪个按钮,内容都会覆盖到第一个.msg里。要实现点击按钮对应到其下方的.msg,需要基于当前点击的按钮去定位对应的目标元素,这里提供两种简单的实现方式:

方法1:通过父容器定位

利用按钮和.msg同属一个父div的结构,先获取按钮的父元素,再在父元素内查找.msg:

let btn = document.querySelectorAll('button');

btn.forEach(function(button) {
  button.addEventListener('click', function() {
    // 获取当前按钮的父容器,再找到容器内的.msg元素
    const targetMsg = this.parentElement.querySelector('.msg');
    targetMsg.innerHTML = this.innerHTML;
  });
});

方法2:直接获取下一个兄弟元素

因为.msg是按钮的直接下一个同级元素,可以用nextElementSibling直接定位:

let btn = document.querySelectorAll('button');

btn.forEach(function(button) {
  button.addEventListener('click', function() {
    // 获取按钮的下一个兄弟元素(就是对应的.msg)
    const targetMsg = this.nextElementSibling;
    targetMsg.innerHTML = this.innerHTML;
  });
});

完整代码示例

<div>
  <button class="btn">button 1</button>
  <p class="msg"></p>
</div>
<div>
  <button class="btn">button 2</button>
  <p class="msg"></p>
</div>
<div>
  <button class="btn">button 3</button>
  <p class="msg"></p>
</div>

<script>
let btn = document.querySelectorAll('button');

btn.forEach(function(button) {
  button.addEventListener('click', function() {
    const targetMsg = this.parentElement.querySelector('.msg');
    targetMsg.innerHTML = this.innerHTML;
  });
});
</script>

关键改动说明

  • 原代码中x.closest(".msg")无效,因为x是赋值后的字符串而非DOM元素,调用closest会报错,已移除
  • 改为基于当前点击的按钮(this)定位对应的.msg元素,确保每个按钮只操作自己对应的目标区域

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:52:56