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

如何利用ES6或jQuery优化多DOM元素创建,实现指定嵌套结构?

优化DOM元素创建与嵌套的实现方案

当然有更简洁优雅的实现方式!不管是用原生ES6特性还是jQuery,都能大幅减少冗余代码,让DOM结构的创建和嵌套逻辑更清晰直观。下面给你两种常用的优化方案:

一、原生ES6优化方案

原生JS结合ES6模板字符串,可以直接把完整的DOM结构以字符串形式定义,避免一个个创建元素的繁琐操作,结构一目了然。

基础实现(快速插入)

// 用模板字符串定义完整的DOM结构,层级关系和最终HTML完全对应
const classSectionHTML = `
<div class="classes" data-class="XII">
  <button onclick="tog('XII')" class="btn btn-block text-mono btn-outline-secondary">XII</button>
  <div id="XII" style="display: none;">
    <div class="card mb-3 text-center bg-secondary text-light border-0">
      <div class="card-body">
        <blockquote class="card-blockquote">
          <h2 class="display-4">XII</h2>
          <hr class="my-4">
          <p class="lead">XII has 5 days per week and will study 6 subjects per day</p>
          <p>During the week they will study: Mathematics, Physics, Biology, etc.</p>
          <button class="btn btn-shadow text-mono btn-danger">Delete</button>
        </blockquote>
      </div>
    </div>
  </div>
</div>
`;

// 插入到页面的目标容器中(比如body,或者某个指定父元素)
document.body.insertAdjacentHTML('beforeend', classSectionHTML);

进阶实现(避免内联事件)

如果想遵循现代JS规范,避免内联onclick事件,可以先创建元素再绑定监听:

// 将模板字符串转换为DOM片段,同时获取容器引用
const classContainer = document.createRange().createContextualFragment(classSectionHTML).firstElementChild;

// 获取按钮元素
const toggleBtn = classContainer.querySelector('.btn-outline-secondary');
const deleteBtn = classContainer.querySelector('.btn-danger');

// 移除内联事件,改用addEventListener绑定
toggleBtn.removeAttribute('onclick');
toggleBtn.addEventListener('click', () => tog('XII'));

deleteBtn.addEventListener('click', () => {
  // 实现删除逻辑,比如移除整个班级模块
  classContainer.remove();
});

// 插入到DOM中
document.body.appendChild(classContainer);

优势:无需声明大量DOM变量,模板字符串完全对应最终HTML结构,修改和维护更方便,同时保持原生JS的性能优势。

二、jQuery实现方案

如果你的项目已经引入了jQuery,那DOM操作会变得更简洁,语法更直观:

// 直接将HTML结构插入到目标容器
$('body').append(`
<div class="classes" data-class="XII">
  <button class="btn btn-block text-mono btn-outline-secondary">XII</button>
  <div id="XII" style="display: none;">
    <div class="card mb-3 text-center bg-secondary text-light border-0">
      <div class="card-body">
        <blockquote class="card-blockquote">
          <h2 class="display-4">XII</h2>
          <hr class="my-4">
          <p class="lead">XII has 5 days per week and will study 6 subjects per day</p>
          <p>During the week they will study: Mathematics, Physics, Biology, etc.</p>
          <button class="btn btn-shadow text-mono btn-danger">Delete</button>
        </blockquote>
      </div>
    </div>
  </div>
</div>
`);

// 绑定事件(推荐使用jQuery的事件绑定,替代内联事件)
$('.classes[data-class="XII"] .btn-outline-secondary').on('click', () => tog('XII'));
$('.classes[data-class="XII"] .btn-danger').on('click', function() {
  // 向上查找并移除整个班级模块
  $(this).closest('.classes').remove();
});

优势:jQuery的选择器和链式调用让DOM操作更省心,代码量更少,适合快速开发场景,事件绑定和DOM遍历也更灵活。

对比总结

你原来的写法需要逐个声明DOM变量、手动设置属性和嵌套关系,不仅代码冗余,而且层级关系不直观,后期修改容易出错。而上面两种优化方案的核心都是用模板字符串直接描述最终DOM结构,让代码逻辑和页面结构一一对应,大幅降低维护成本:

  • 若项目无jQuery依赖,优先选择原生ES6方案,兼顾性能和可读性;
  • 若已有jQuery,用jQuery方案可以进一步简化代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:21:13