Get the first scrollable parent of an element

Starting from the given ele element, we traverse all parents up to the root of document (document.body). For each parent node, we check if it is a scrollable node.

const isScrollable = function(ele) {
const hasScrollableContent = ele.scrollHeight > ele.clientHeight;

const overflowYStyle = window.getComputedStyle(ele).overflowY;
const isOverflowHidden = overflowYStyle.indexOf('hidden') !== -1;

return hasScrollableContent && !isOverflowHidden;

const getScrollableParent = function(ele) {
return (!ele || ele === document.body)
? document.body
: (isScrollable(ele) ? ele : getScrollableParent(ele.parentNode));


Get the direction of the text selection
Get the text content of an element