You need to enable JavaScript to run this app. jQuery按item类型条件将PHP响应数据追加到不同div容器的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

jQuery按item类型条件将PHP响应数据追加到不同div容器的实现问题

代码存在的核心问题
  • 全局ID冲突:HTML中两个<table>都使用了id="table",根据DOM规范ID必须全局唯一,jQuery选择器$("table#table")只会匹配文档中第一个带该ID的元素,tab2容器内的表格永远无法被选中操作。
  • 条件判断语法错误:两个分支的判断都写成了{item.type } == 'I'的形式,相当于把item.type作为属性值包装成了对象字面量,拿对象和字符串做相等比较永远返回false,所有分支逻辑都不会被触发。
  • 模板字符串内嵌入无效DOM操作:原代码把$("div.tab1").prepend(...)这类jQuery方法直接写在反引号包裹的模板字符串内部,模板字符串只会将这段代码作为纯文本输出到页面,不会真正执行DOM操作;且<td>标签属于表格结构的子元素,不能脱离<tr>、<table>结构直接插入到div容器中。
  • 重复遍历渲染:初始代码先无差别把所有数据追加到同一个表格,之后又尝试做条件分流,相当于同一份数据被遍历两次,会造成页面重复渲染、条目错位的问题。
修正后的完整实现

调整后的HTML结构

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- 替换重复ID为独立类名,提前定义好两个表格的头部结构 -->
<div class="tab1">    
 <table class="tab-table">
   <thead>
     <tr>
       <th style="width: 20%; text-align: center; vertical-align: middle;">Name</th>
       <th style="width: 10%; text-align: center; vertical-align: middle;">Age</th>
     </tr>
   </thead>
   <tbody></tbody>
 </table>
</div>

<div class="tab2">    
 <table class="tab-table">
   <thead>
     <tr>
       <th style="width: 20%; text-align: center; vertical-align: middle;">House</th>
       <th style="width: 10%; text-align: center; vertical-align: middle;">Rent</th>
     </tr>
   </thead>
   <tbody></tbody>
 </table>
</div>

修正后的JS逻辑

// 分别获取两个tab下的表格容器,缓存选择结果减少重复DOM查询
const $tab1Body = $('.tab1 .tab-table tbody');
const $tab2Body = $('.tab2 .tab-table tbody');

// 单次遍历返回数据,按type字段分流渲染
$.each(response.data, function (index, item) {
  // 修正语法,直接读取item.type字段做严格相等判断
  if (item.type === 'I') {
    // 生成符合表格结构的tr片段,直接追加到tab1的tbody中
    const rowHtml = `
      <tr>
        <td>${item.name}</td> 
        <td>${item.age}</td>
      </tr>
    `;
    $tab1Body.append(rowHtml);
  }

  if (item.type === 'A') {
    // 生成对应结构的tr片段,追加到tab2的tbody中
    const rowHtml = `
      <tr>
        <td>${item.house}</td> 
        <td>${item.rent}</td>
      </tr>
    `;
    $tab2Body.append(rowHtml);
  }
});
实现注意事项
  • 模板字符串仅用于生成需要插入的HTML代码片段,所有jQuery的DOM选择、操作逻辑必须写在模板字符串外部,否则代码不会被执行。
  • 页面内需要操作的元素必须保证标识唯一,禁止多个元素共用同一个ID,跨元素批量操作优先使用类选择器。
  • 字段值比较推荐使用严格相等===,避免隐式类型转换导致的判断失效;不要误把字段值包装成对象字面量再做比较。
  • 处理接口返回的列表数据时,单次遍历完成分流逻辑即可,不要重复遍历数组造成性能浪费和重复渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 08:45:00