【发布时间】:2020-12-09 19:04:17
【问题描述】:
我有当前的 HTML:
<div id="1-1">TITLE1</div>
<div id="1-2">TITLE2</div>
<div id="1-3">TITLE3</div>
<div id="1-4">TITLE4</div>
<div id="1-5">TITLE5</div>
<div class="topic">A1</div>
<div class="topic">B2</div>
<div class="topic">C3</div>
<div class="topic">D4</div>
<div class="topic">E5</div>
<div class="topic">F6</div>
<div class="topic">G7</div>
<div class="topic">H8</div>
<div class="topic">I9</div>
<div class="topic">J10</div>
<div class="topic">K11</div>
<div class="topic">L12</div>
<div class="topic">M13</div>
<div class="topic">N14</div>
<div class="topic">O15</div>
我想使用 JavaScript 创建一个 for loop,它将基于此对象将正确的 .topic 节点附加到正确的 TITLE div 中:
all = {'1-1': ['A', 'B', 'C'],
'1-2': ['D'],
'1-3': ['E', 'F', 'G', 'H'],
'1-4': ['I', 'J'],
'1-5': ['K', 'L', 'M', 'N', 'O']
};
循环理想的结果:
<div id="1-1">TITLE1
<div class="topic">A1</div>
<div class="topic">B2</div>
<div class="topic">C3</div>
</div>
<div id="1-2">TITLE2
<div class="topic">D4</div>
</div>
<div id="1-3">TITLE3
<div class="topic">E5</div>
<div class="topic">F6</div>
<div class="topic">G7</div>
<div class="topic">H8</div>
</div>
<div id="1-4">TITLE4
<div class="topic">I9</div>
<div class="topic">J10</div>
</div>
<div id="1-5">TITLE5
<div class="topic">K11</div>
<div class="topic">L12</div>
<div class="topic">M13</div>
<div class="topic">N14</div>
<div class="topic">O15</div>
</div>
我通过创建两个数组尝试了这一点——all 中的“TITLE*”位置之一和每个切片中应该有多少“主题”的另一个位置
let header_position = [0,4,6,11,14]
let topics_between = [3,1,4,2,5]
我试图利用这一点并为for loop 找到一个模式,以便我可以使用这些数组编号将事物放在正确的位置,但我似乎无法找出正确的循环。任何帮助将不胜感激:
尝试的解决方案
for (i = 0; i < header_position.length; i++) {
// i = 0 topics.slice(0,2)
// i = 2 topics.slice(3,3)
// i = 3 topics.slice(4,7)
// i = 4 topics.slice(8,9)
// i = 5 topics.slice(10,14)
let currentslice = topics.slice(header_position[i] + 1, header_position[i + 1] - 2)
if (i === 0) {
currentslice = topics.slice(0, topics_between[i] - 1)
}
console.log(currentslice)
currentslice.appendTo("#1-" + [i + 1])
}
这个循环不能按现在的样子工作,但我希望能在尝试使这个逻辑正常运行时提供任何帮助或考虑!
【问题讨论】:
-
你能改变
all数组的结构吗?我会选择一个对象,将标题ids 作为键,并将内容标识符数组作为值。喜欢all = {'1-1': ['A', 'B', 'C'], ...};。这将相对容易迭代。 -
嗨@Teemu!我已根据您的建议更改了对象 - 谢谢!
-
甚至没有标题ID:jsfiddle.net/ov51ghp2/1。但是,如果您必须手动维护订单表,那么使用对象可能会更舒服一些。一个理想的解决方案是,主题将有一个标识标题的类,将主题附加到标题下将是一个 O(n) 循环。
标签: javascript html jquery loops