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

使用$.each循环追加元素时页面显示[object]的问题排查

解决$.each循环追加元素显示[object]的问题

问题根源

页面显示[object]的核心原因是**$.each()的返回值不是你创建的DOM元素,而是遍历的原数组**。当你把$.each()的结果直接传给append()时,jQuery会把数组转换成字符串,最终就显示成了[object]。

简化代码的修正

原简化代码里,你试图把$.each()的结果直接append到tbody里,但$.each()返回的是strObj.data数组,不是创建的<tr>元素。正确做法是先创建tbody元素,再在$.each()内部把生成的tr追加到tbody中:

strObj = {"width":"12","id":"table_test","title":"Latest Indexed Pages","headers":[{"title":"Page Url"},{"title":"Country"},{"title":"Language"},{"title":"Status"}],"data":[[{"text":"/services","link":""}],[{"text":"/services","link":""}]]}

// 先创建tbody元素
let $tbody = $('&lt;tbody&gt;',{});
// 遍历数据,创建tr并追加到tbody
$.each(strObj.data, function(i, ii){
    $tbody.append($('&lt;tr&gt;',{}).append('&lt;td&gt;&lt;/td&gt;'));
});
// 最后把tbody加到目标table中
$('table').append($tbody);

完整代码的修正

完整代码同样犯了把$.each()返回值直接append的错误,修改方式一致:先创建tbody,在循环内往tbody里加tr,再把tbody加到table中:

let tableCreate_structure = $('&lt;div&gt;',{class: 'cold-'+tableCreate_width,'id':strObj.id}).append(
    $('&lt;div&gt;',{class:'card'}).append(
        $('&lt;div&gt;',{class:'card-header'}).append(
            $('&lt;h3&gt;',{class:'card-title'}).text(strObj.title)
        ),
        $('&lt;div&gt;',{class:'table-responsive'}).append(
            $('&lt;table&gt;',{class:'table table-vcenter card-table table-striped'}).append(
                $('&lt;thead&gt;',{}).append(tableCreate_headers),
                (function(){
                    // 单独处理tbody的创建和填充
                    let $tbody = $('&lt;tbody&gt;',{});
                    $.each(strObj.data, function(i, ii){
                        let $tr = $('&lt;tr&gt;',{});
                        // 遍历当前行的所有数据,生成对应的td
                        $.each(ii, function(j, item){
                            $tr.append($('&lt;td&gt;').text(item.text));
                        });
                        $tbody.append($tr);
                    });
                    return $tbody;
                })()
            )
        )
    )
); 
$('#content_body').append(tableCreate_structure);

替代方案(可选)

如果想在一行内完成,可以用$.map()代替$.each()——$.map()会返回新的DOM元素数组,能直接被append()接收:

$('&lt;tbody&gt;',{}).append(
    $.map(strObj.data, function(i, ii){
        return $('&lt;tr&gt;',{}).append('&lt;td&gt;&lt;/td&gt;')[0]; // 需取出原生DOM元素,而非jQuery对象
    })
)

不过这种写法可读性稍弱,推荐优先使用先创建容器再追加的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:05:43