使用 previousElementSibling 获取非隐藏元素

Get non hidden element with previousElementSibling

我有一长串物品。其中一个是活跃的。我想从那个活动项目转到上一个。我可以用 previousElementSibling.

问题是我想跳过隐藏元素。我该怎么做?

const active = document.querySelector('.active');
const prev = active.previousElementSibling;
console.log(active);
console.log(prev);
<div></div>
<div hidden></div>
<div class="active"></div>

在现实世界中,该列表是动态的并且更长,因此没有疯狂的破解方法。

您可以继续查找之前的元素,直到找到未隐藏的元素或到达第一个元素为止:

const active = document.querySelector('.active');
let prev = active.previousElementSibling;
while (prev !== null) {
  if (!prev.hidden) break;
  prev = prev.previousElementSibling;
}
console.log(active);
console.log(prev);

您可以通过循环重复遍历 previousElementSibling 的元素来执行此操作,直到找到一个未隐藏的元素。例如:

const active = document.querySelector('.active');

// Get the previous sibling
let result = active.previousElementSibling;

// If it's hidden, continue back further, until a sibling isn't hidden
while (result && result.hidden == true) {
   result = result.previousElementSibling;
}

if (result) {
  // You got a non-hidden sibling!
  console.log(result);
} else {
  // There is no previous sibling that's not hidden
}