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

JavaScript生成HTML表格时渲染JSON中URL对应图片的方法

问题根因

当前createTable函数对所有单元格内容统一调用document.createTextNode()处理,该方法只会将传入值渲染为纯文本。你存入images数组的是ImageDOM对象,直接走文本渲染逻辑只会显示[object HTMLImageElement]字符串,无法正常展示图片。
另外你传入表格的数据源结构是[标题数组, 餐厅数组, 图片数组],按行渲染会出现「第一行全是标题、第二行全是餐厅名、第三行全是图片」的错位布局,也需要一并调整。

修复步骤
  • 调整单元格渲染逻辑,判断内容类型:DOM元素直接插入单元格,文本内容走文本节点渲染
  • 重构数据遍历逻辑,按「单条数据一行」的常规表格格式组织内容
  • 复用页面已存在的#table元素,避免重复生成表格

修复后的完整JS代码

// 存储接口返回的原始字符串
const list = "{{responseText|escapejs}}";
let titles = [], images = [], restaurants = [];

// 原有逐字符提取逻辑可正常运行,更推荐替换为JSON.parse直接解析,容错率更高
// const resData = JSON.parse(list);
// 后续直接从resData按字段名取值即可,无需手写循环逐字符匹配
for (var i = 0; i < list.length-8; i++) {
    if(list[i] == 't' && list[i+1] == 'ti') {
        var title = '';
        for(var j = (i+8); list[j] != ","; j++) title += list[j];
        i = j;
        titles.push(title)
    }
}
for (var i = 0; i < list.length-8; i++) {
    if(list[i] == 'h' && list[i+1] == 'ht') {
        var image = '';
        for(var j = (i); list[j] != ","; j++) image += list[j];
        i = j;
        var img = new Image();
        img.src = image.slice(0, -1);
        // 给图片设置固定尺寸,避免撑乱表格布局
        img.style.width = "100px";
        img.style.height = "100px";
        img.style.objectFit = "cover";
        images.push(img);
    }
}
for (var i = 0; i < list.length-17; i++) {
    if(list[i] == 'r' && list[i+1] == 'e' && list[i+2] == 'res') {
        var restaurant = '';
        for(var j = (i+17); list[j] != ","; j++) restaurant += list[j];
        i = j;
        restaurants.push(restaurant)
    }
}

function createTable() {
    const table = document.getElementById('table');
    const tableBody = document.createElement('tbody');

    // 插入表头行
    const headerRow = document.createElement('tr');
    ["标题", "所属餐厅", "配图"].forEach(text => {
        const th = document.createElement('th');
        th.textContent = text;
        headerRow.appendChild(th);
    })
    tableBody.appendChild(headerRow);

    // 按单条数据一行的规则渲染内容
    const dataLen = Math.max(titles.length, restaurants.length, images.length);
    for (let i = 0; i < dataLen; i++) {
        const row = document.createElement('tr');
        
        // 标题列
        const titleTd = document.createElement('td');
        titleTd.textContent = titles[i] || '-';
        row.appendChild(titleTd);

        // 餐厅名列
        const restTd = document.createElement('td');
        restTd.textContent = restaurants[i] || '-';
        row.appendChild(restTd);

        // 图片列
        const imgTd = document.createElement('td');
        if (images[i]) imgTd.appendChild(images[i]);
        else imgTd.textContent = '无图';
        row.appendChild(imgTd);

        tableBody.appendChild(row);
    }

    table.appendChild(tableBody);
}

// 直接调用渲染表格即可
createTable();
额外说明

手写逐字符匹配JSON字符串的解析逻辑容错率极低,只要接口返回的字段内容里包含ti/ht/res这类字符就会解析失败,生产环境直接用JSON.parse()转换JSON字符串为JS对象后再取字段,稳定性会高很多。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:48:36