任务是通过点击单元格来获取颜色段的第一个和最后一个id值。如果点击如图所示,那么应该得到“c9”和“d31”的值。对于任何其他段相同。我试图在单击时在数组中定义一个元素,并从它来回使用,直到下一个单元格的颜色与当前单元格的颜色不匹配。然后我们写下id。但是有些东西不出来。那行不通,然后永恒的循环开始了。也许 while 通常是一个坏主意。我将不胜感激
let arr = [
{
id: 'm2c',
color: 'yellow'
},
{
id: 'd1b',
color: 'red'
},
{
id: 'd6',
color: 'red'
},
{
id: 'd3',
color: 'red'
},
{
id: 'd4',
color: 'red'
},
{
id: 'd5',
color: 'yellow'
},
{
id: 'd6',
color: 'yellow'
},
{
id: 'd7',
color: 'yellow'
},
{
id: 'v1',
color: 'yellow'
},
{
id: 'c9',
color: 'red'
},
{
id: 'd1k',
color: 'red'
}, {
id: 'd92',
color: 'red'
},
{
id: 'd12',
color: 'red'
},
{
id: 'd31',
color: 'red'
},
{
id: 'd14',
color: 'yellow'
},
{
id: 'd12',
color: 'yellow'
},
{
id: 'd45',
color: 'yellow'
},
{
id: 'd3',
color: 'yellow'
},
{
id: 'd00',
color: 'yellow'
},
{
id: 'd3o',
color: 'yellow'
},
];
let ul = document.createElement('ul');
let startId = document.createElement('span');
let endId = document.createElement('span');
arr.forEach(function (item) {
let li = document.createElement('li');
li.style.backgroundColor = item.color;
li.innerHTML = item.id;
ul.appendChild(li);
});
document.getElementById('container').appendChild(ul);
document.getElementById('container').appendChild(startId );
document.getElementById('container').appendChild(ul);
document.querySelector('ul').addEventListener('click', e => {
let content = e.target.innerHTML;
let startIdValue;
let endIdValue;
arr.forEach(function (item, i, arr) {
if (item.id === content) {
while (arr[i--]) {
if (arr[i - 1].color !== item.color) {
startIdValue = item.id;
return
}
}
while (arr[i++]) {
if (arr[i + 1].color !== item.color) {
endIdValue = item.id;
return
}
}
}
});
});
ul {
width: 1000px;
padding-left: 0;
margin-left: 0;
display: flex;
}
li {
width: 50px;
height: 50px;
list-style-type: none;
border: 1px solid #ccc;
}
<div id="container">
</div>

尝试按照以下思路思考:
下面的代码纯粹是一个搜索功能,在输入处没有接口(以免混淆代码) - 来自段的元素的 ID。在输出 - 一个段。如何在单元格中单击并获取 ID 以将其传递给函数,我想它已经知道了。