使用 Javascript 移动嵌套的 HTML dom 节点

Moving nested HTML dom nodes with Javascript

提问人:turkehy 提问时间:9/25/2023 最后编辑:Rakyturkehy 更新时间:9/26/2023 访问量:92

问:

我有一个类似于以下内容的 DOM 树结构

<div class='row'>
    <div class='cell'>
        <div class='item'>1</div>
        <div class='item'>2</div>
    </div>
    <div class='cell'>
        <div class='item'>3</div>
    </div>
</div>
<div class='row'>
    <div class='cell'>
        <div class='item'>4</div>
        <div class='item'>5</div>
    </div>
    <div class='cell'>
        <div class='item'>6</div>
        <div class='item'>7</div>
    </div>
</div>

这呈现为这个 actual 这是我创建的代码,显示了上述结果

.row {
  display: flex;
  flex-wrap: wrap;
}

.cell {}

.item {
  background-color: #1d8ed2;
  height: 100px;
  width: 200px;
  margin-left: 10px;
  margin-bottom: 10px;
}
<div class='row'>
  <div class='cell'>
    <div class='item'>1</div>
    <div class='item'>2</div>
  </div>
  <div class='cell'>
    <div class='item'>3</div>
  </div>
</div>
<div class='row'>
  <div class='cell'>
    <div class='item'>4</div>
    <div class='item'>5</div>
  </div>
  <div class='cell'>
    <div class='item'>6</div>
    <div class='item'>7</div>
  </div>
</div>

我想以这样一种方式移动香草 javascript 中的元素 项目以此模式移动。expected movement pattern

最终渲染应如下预期结果所示expected

这里棘手的部分是它们在单元格和行中的嵌套方式

我试过了,但预期的结果不是预期的结果

const cells = document.querySelectorAll('.cell');
if (cells.length > 0) {
  cells.forEach((cell, index) => {
    if (cell.children.length == 2) {
      return;
    }

    if (cells[index + 1]) {
      const itemToMove = cells[index + 1].children[0];
      cell.appendChild(itemToMove);
    }
  })
}

not desired result

javascript html css 数组 dom

评论

2赞 Alexander Nenashev 9/25/2023
结果似乎是随机的,逻辑是什么?
0赞 turkehy 9/25/2023
@AlexanderNenashev预期结果可以被认为是在缺少项目时,基本上将项目向左和向右移动,就像梯子型图案一样
2赞 CBroe 9/25/2023
“这呈现到这个” - 请展示一个适当的最小可重现示例,其中包括您在那里应用的 CSS,以使其像这样呈现。
2赞 David Thomas 9/25/2023
这将容易得多 - 而且非常简单,使用 - 没有所有的嵌套,HTML 可以更改吗,或者它是否必须以这种方式形成?display: grid
1赞 somethinghere 9/25/2023
选择所有内容,然后将它们放在每两行中,直到用完为止?

答: 暂无答案