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

如何检测子元素是否存在指定data-id?避免收藏列表重复项

解决收藏列表重复渲染问题

问题根源

每次调用displayListItem时,都会遍历整个收藏数组并将所有项重新添加到DOM中,导致已存在的条目被重复插入。

修复方案(两种可选)

方案一:渲染前清空列表(推荐)

修改displayListItem函数,每次渲染前先清空收藏列表的DOM内容,再重新渲染最新的收藏项,从根源避免重复:

const displayListItem = function () {
  // 清空现有列表内容
  pokemonList.innerHTML = '';
  favourite.forEach((listItem) => {
    addToList(listItem);
  });
};

方案二:添加前检查DOM是否已存在该项

修改addToList函数,在插入新条目之前,先检查DOM中是否已有对应ID的元素,存在则跳过添加:

const addToList = function ({ name, id }) {
  // 检查是否已存在该ID的列表项
  if (document.getElementById(id)) {
    return;
  }
  let html1 = `
  <li class="list-item" data-id="${id}" id="${id}">
  ${name}
  <span>&nbsp;</span>
  <button class="btn-remove">remove</button>
  </li>
  `;
  pokemonList.insertAdjacentHTML('beforeend', html1);
};

额外优化点

当前点击事件中调用displayListItem(favourite),但函数定义未接收参数,可统一为:

const displayListItem = function (items) {
  pokemonList.innerHTML = '';
  items.forEach((listItem) => {
    addToList(listItem);
  });
};

调用时直接传入更新后的数组:

displayListItem(favourite);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:05:14