function IsInFlow(element) { var style = window.getComputedStyle(element); return style.getPropertyValue("display") !== "none" && style.getPropertyValue("position") !== "absolute" && style.getPropertyValue("position") !== "fixed"; } function firstInFlowChild(element) { var child = element.firstElementChild; if (!child || IsInFlow(child)) return child; return nextInFlowSibling(child); } function nextInFlowSibling(element) { var child = element; do { child = child.nextElementSibling; } while (child && !IsInFlow(child)); return child; } function previousInFlowSibling(element) { var child = element; do { child = child.previousElementSibling; } while (child && !IsInFlow(child)); return child; }