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

如何用jQuery将JSON数据正确追加到现有HTML列表的对应<li>元素?

解决jQuery追加JSON数据到现有HTML列表的问题

看起来你遇到的核心问题是两种错误的实现:要么创建全新列表导致DOM冗余,要么追加时把所有数据重复添加到每个现有<li>里。我来帮你梳理正确的实现方式,分两种常见需求场景:

场景1:给每个现有<li>追加对应的JSON值

如果你的需求是把test.json里的每个值分别对应到现有3个<li>中(比如val1对应第一个<li>,val2对应第二个,以此类推),可以这样写:

$.getJSON("test.json", function(data) {
  // 将JSON对象转换为有序的键值对数组
  const dataEntries = Object.entries(data);
  
  // 遍历每个现有<li>,匹配对应索引的JSON数据
  $('#menu li.test').each(function(index) {
    // 确保索引对应的数据存在
    if (dataEntries[index]) {
      const [key, val] = dataEntries[index];
      // 给当前<li>追加内容,不会影响其他<li>
      $(this).append(`<p>${val}</p>`);
    }
  });
});

为什么之前的代码出错?

你第二段代码里,每次循环都用appendTo('ul#menu li'),这个选择器会匹配所有现有<li>,所以每遍历一个JSON项,就会给每个<li>都加一遍内容,最终每个<li>里都有所有JSON值的<p>标签。上面的代码通过each遍历单个<li>,只给当前<li>追加对应的数据,就解决了重复添加的问题。


场景2:把JSON数据作为新<li>追加到现有列表末尾

如果你的需求是在现有<ul id="menu">后面添加新的<li>(而不是修改现有<li>),可以这样写:

$.getJSON("test.json", function(data) {
  const newItems = [];
  
  // 遍历JSON生成新的<li>字符串
  $.each(data, function(key, val) {
    newItems.push(`<li class="test" id="${key}"><a href="#">${key}</a><p>${val}</p></li>`);
  });
  
  // 把所有新<li>一次性追加到现有<ul>末尾
  $('#menu').append(newItems.join(''));
});

为什么之前的创建列表代码有问题?

你第一段代码是创建了一个全新的<ul>并添加到main#wrapper里,导致页面上有两个并列的列表。上面的代码直接把新<li>追加到已有的<ul id="menu">中,避免了多余的DOM嵌套。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:43:38