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

如何使用innerHTML/insertAdjacentHTML和JavaScript替换Div内容?

点击按钮替换Section内容的最佳实现方案

我明白你现在的处境——懂原理但不知道怎么把代码落地,尤其是JavaScript这块,通过实践学习绝对是最有效的方式!咱们一步步来解决这个问题,先从原生JavaScript的方案说起(帮你吃透底层逻辑),之后再给你jQuery的简化版本,你可以根据自己的需求选择。


核心思路梳理

你的需求很明确:点击不同按钮,用对应的HTML内容替换Section里的初始内容。本质上就是监听按钮点击事件 → 定位目标内容 → 切换/替换当前显示的内容。下面是两种最适合你当前场景的实现方式:


方式一:原生JS + 内容块显隐切换(最简单易上手)

这个方案把所有内容都写在HTML里,只是通过CSS控制显示/隐藏,逻辑清晰,非常适合新手学习。

步骤1:调整HTML结构

首先修改按钮,给每个按钮加上data-target属性(对应要显示的内容ID),同时去掉target="_blank"(不需要打开新页面);然后把注释的内容块都放开,给它们统一加个类content-block,初始只显示第一个,其他隐藏:

<section class="section-web new-section__white section new_section" id="web">
  <div class="row web-btns">
    <div class="col span-2-of-2 ">
      <a class="btn btn-ghost" href="#" data-target="button-1">Button 1</a>
      <a class="btn btn-ghost" href="#" data-target="button-2">Button 2</a>
      <a class="btn btn-ghost" href="#" data-target="button-3">Button 3</a>
      <a class="btn btn-ghost" href="#" data-target="button-4">Button 4</a>
    </div>
  </div>

  <!-- 所有内容块 -->
  <div class="row content-block" id="button-1">
    <div class="col span-1-of-2">
      <h2>Text Button-1</h2>
      <p>Some Text</p>
    </div>
  </div>
  <div class="row content-block" id="button-2" style="display:none;">
    <div class="col span-2-of-3">
      <h2>text Button-2</h2>
      <p>text</p>
    </div>
  </div>
  <div class="row content-block" id="button-3" style="display:none;">
    <div class="col span-2-of-2">
      <h2>text Button-3</h2>
      <p>text</p>
    </div>
  </div>
  <div class="row content-block" id="button-4" style="display:none;">
    <div class="col span-2-of-2">
      <h2>text Button-4</h2>
      <p>text</p>
    </div>
  </div>
</section>

步骤2:添加原生JS逻辑

获取所有按钮和内容块,给每个按钮绑定点击事件,点击时隐藏所有内容,显示目标内容:

// 获取页面上的所有按钮和内容块
const buttons = document.querySelectorAll('.btn-ghost');
const contentBlocks = document.querySelectorAll('.content-block');

// 遍历每个按钮,绑定点击事件
buttons.forEach(button => {
  button.addEventListener('click', function(e) {
    // 阻止a标签默认的跳转行为(避免点击后跳转到页面顶部)
    e.preventDefault();
    // 获取当前按钮对应的目标内容ID
    const targetContentId = this.getAttribute('data-target');
    
    // 先隐藏所有内容块
    contentBlocks.forEach(block => {
      block.style.display = 'none';
    });
    
    // 显示目标内容块
    document.getElementById(targetContentId).style.display = 'block';
  });
});

方式二:原生JS + innerHTML动态插入内容

如果不想在HTML里写太多隐藏内容,可以把每个按钮对应的HTML存在JS对象里,点击时用innerHTML替换容器内容,更灵活。

步骤1:调整HTML结构

添加一个专门的内容容器,初始放入按钮1的内容:

<section class="section-web new-section__white section new_section" id="web">
  <div class="row web-btns">
    <div class="col span-2-of-2 ">
      <a class="btn btn-ghost" href="#" data-target="button-1">Button 1</a>
      <a class="btn btn-ghost" href="#" data-target="button-2">Button 2</a>
      <a class="btn btn-ghost" href="#" data-target="button-3">Button 3</a>
      <a class="btn btn-ghost" href="#" data-target="button-4">Button 4</a>
    </div>
  </div>

  <!-- 内容容器 -->
  <div id="content-container">
    <div class="row">
      <div class="col span-1-of-2">
        <h2>Text Button-1</h2>
        <p>Some Text</p>
      </div>
    </div>
  </div>
</section>

步骤2:添加原生JS逻辑

用模板字符串存储每个按钮的内容,点击时替换容器内容:

// 存储每个按钮对应的HTML内容(用模板字符串,换行和格式都能保留)
const contentTemplates = {
  'button-1': `
    <div class="row">
      <div class="col span-1-of-2">
        <h2>Text Button-1</h2>
        <p>Some Text</p>
      </div>
    </div>
  `,
  'button-2': `
    <div class="row">
      <div class="col span-2-of-3">
        <h2>text Button-2</h2>
        <p>text</p>
      </div>
    </div>
  `,
  'button-3': `
    <div class="row">
      <div class="col span-2-of-2">
        <h2>text Button-3</h2>
        <p>text</p>
      </div>
    </div>
  `,
  'button-4': `
    <div class="row">
      <div class="col span-2-of-2">
        <h2>text Button-4</h2>
        <p>text</p>
      </div>
    </div>
  `
};

// 获取内容容器和所有按钮
const contentContainer = document.getElementById('content-container');
const buttons = document.querySelectorAll('.btn-ghost');

// 绑定点击事件
buttons.forEach(button => {
  button.addEventListener('click', function(e) {
    e.preventDefault();
    const targetKey = this.getAttribute('data-target');
    // 用innerHTML替换容器内容
    contentContainer.innerHTML = contentTemplates[targetKey];
  });
});

方式三:jQuery简化实现(适合快速开发)

如果你习惯用jQuery,代码会更简洁,原理和上面的原生方案一致:

$(document).ready(function() {
  $('.btn-ghost').click(function(e) {
    e.preventDefault();
    // 获取目标内容ID
    const targetId = $(this).data('target');
    
    // 方案一:切换显隐
    $('.content-block').hide();
    $('#' + targetId).show();
    
    // 方案二:动态插入内容(和原生方式二对应)
    // const contentTemplates = {...}; // 同上面的对象
    // $('#content-container').html(contentTemplates[targetId]);
  });
});

给你的学习建议

  • 如果你正在学习JavaScript,优先选原生方案一,它能帮你直观理解DOM元素的选择、事件绑定和样式操作;
  • 记得测试每个按钮的点击效果,重点检查是否阻止了a标签的默认跳转(否则页面会滚动到顶部);
  • 可以尝试给按钮添加“激活状态”(比如点击后改变按钮样式),提升用户体验,这也是很好的JS练习。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:10:52