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

如何用Vanilla JS将每两个<li>元素包裹到<div>中?代码排查求助

问题排查与修正

原代码存在的核心错误:

  • items.slice(i, i += 4):这行逻辑完全错误,i +=4会直接修改循环变量,导致每次循环i额外增加4(叠加原循环的i+=2,实际步长变成6),且slice返回的分组数组未被保存,属于无效操作。正确分组应该是items.slice(i, i+2)并赋值给变量。
  • items.parentNode:items是DOM元素数组,并非单个DOM节点,不存在parentNode属性,应直接获取<ul>元素作为父容器。
  • wrapper.appendChild(items):appendChild仅支持单个DOM节点参数,不能直接传入数组,需用append(...group)批量添加节点,或遍历分组元素逐个添加。
  • 插入逻辑错误:原代码试图将wrapper插入到数组items前,这完全不符合DOM操作规则,应将wrapper插入到当前分组第一个li的原位置。

修正后的代码:

const ul = document.querySelector('ul');
const items = [...document.querySelectorAll('ul li')];

for (let i = 0; i < items.length; i += 2) {
    // 截取当前组的2个li元素
    const group = items.slice(i, i + 2);
    const wrapper = document.createElement('div');
    // 将当前组的li批量添加到div中
    wrapper.append(...group);
    // 将div插入到ul中对应位置
    ul.insertBefore(wrapper, group[0]);
}

补充说明:

从HTML语义角度,<ul>的直接子元素只能是<li>,如果业务允许,建议用<li>作为分组容器替代<div>,避免语义违规。

内容的提问来源于stack exchange,提问作者Bartłomiej Kuźniar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:25:15