像jQuery一样使用prevAll的JavaScript

JavaScript to use prevAll like jQuery?

本文关键字:prevAll JavaScript 一样 jQuery      更新时间:2023-09-26

如何在JavaScript中实现这一点?

function prevAll (element) {
    // some code to take all siblings before element?
    return elements;
};

使用.previousElementSibling,您可以获得上一个节点,它是一个实际的元素(而不是文本节点或注释(

function prevAll(element) {
    var result = [];
    while (element = element.previousElementSibling)
        result.push(element);
    return result;
}

如果需要,可以在IE8中对.previousElementSibling属性进行聚合填充。

我应该注意,IIRC,jQuery按文档顺序返回元素。如果是这种情况,并且这是您所需要的,那么当您返回数组时,只需.reverse()即可。

使用previousSibling属性,并循环直到它为null。

如果情况需要,可以使用生成器:

const sibGen = function* (element) {
  let sibling = element.previousElementSibling; 
  while(sibling !== null) {
    sibling = sibling.previousElementSibling;
    yield sibling
  }
}

然后称之为:

const siblingGenerator = sibGen(myElement);
// filter(Boolean) removes the null element
const allSiblings = [...siblingGenerator].filter(Boolean);