previousElementSiblings.js

/**
 * This method returns an element's previous siblings.
 * 
 * @param {Element} element - An Element
 * @param {Function} [filter] - A method that receives the previous sibling as a parameter, and returns true or false
 * @returns {Array} Array of previous sibling elements
 * 
 * @example
 * previousElementSiblings(el, sibling => {
 *     return sibling.tagName == "checkbox"
 * })
 */
export default function previousElementSiblings (el, filter) {
  const siblings = [];
  while(el = el.previousElementSibling) {
    if(!filter || filter(el)) {
      siblings.push(el)
    }
  }
  return siblings.reverse()
}