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

遍历AJAX返回数组生成div内容重复,如何按不同区块独立渲染

问题根因
  • 你使用全局选择器$(".container-offer")追加内容时,会匹配页面上所有已生成的同class元素,每新增一个条目就会往之前所有已存在的区块里重复插入内容,这是出现重复的核心原因
  • 没有封装通用的渲染逻辑,三个数组重复写代码也容易出现逻辑不一致的问题
  • 原有代码中value.articulos[index]的写法存在逻辑错误:这里的index是你遍历目标数组(比如firstItems)的下标,而每个条目自身的articulos是独立数组,从你给出的结构来看每个articulos长度为1,应该固定取索引0,否则数组长度超过1时会出现索引越界。
实现代码
if(idOffer == 8){
    // 封装通用渲染函数,复用逻辑
    function renderOfferBlock($parent, itemList) {
        $.each(itemList, function(index, value){
            // 先创建当前区块的根元素,存为变量,只操作这个元素,避免影响其他区块
            const $block = $(`
                <div class="container-offer">
                    <div class="panel-heading-offer"><span class="ml-3">${value.nombre}</span></div>
                </div>
            `);
            // 只往当前创建的区块里追加条目,不要用全局选择器
            $block.append(`
                <div class="panel-heading-offer-items row mt-2">
                    <div class="col-md-1 ml-2">
                        <input type="checkbox" value="${value.articulos[0].id}">
                    </div>
                    <div class="col-md-2 ml-2">
                        <span>${value.articulos[0].codigo}</span>
                    </div>
                    <div class="col-md-4">
                        <span>${value.articulos[0].nombre}</span>
                    </div>
                    <div class="col-md-2">
                        <span>${value.articulos[0].precio} €</span>
                    </div>
                    <div class="col-md-2">
                        <input type="number" class="form-control" value="1">
                    </div>
                </div>
            `);
            // 把整个区块追加到父容器
            $parent.append($block);
        });
    }

    const $container = $(".div-bag");
    const targetObj = response[2];
    // 分别渲染三个数组,内容完全独立
    renderOfferBlock($container, targetObj.firstItems);
    renderOfferBlock($container, targetObj.secondItems);
    renderOfferBlock($container, targetObj.thirdFamily);
}
修改说明
  • 把重复的渲染逻辑抽成公共函数,传入要渲染的数组即可,不需要重复写三次结构代码
  • 每次创建区块时先把DOM节点存为本地变量,所有追加操作都只针对当前这个节点,不会误操作其他已存在的区块,彻底解决内容重复问题
  • 修正了articulos的索引取值逻辑,避免出现索引越界取不到值的问题
  • 三个数组按顺序渲染,自动形成三个独立区块,符合你的预期效果
  • 如果单个条目对应多个商品,只需要在公共函数里再加一层遍历value.articulos的逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:45:00