function getParentBySelector(node, selector, stop_selector = 'body') { var parent = node.parentNode; while (true) { if (parent.matches(stop_selector)) break; if (parent.matches(selector)) break; parent = parent.parentNode; // get upper parent and check again } if (parent.matches(stop_selector)) parent = null; // when parent is a tag 'body' -> parent not found return parent; }; var hasClass = function(el, cls) { var regexp = new RegExp('(\\s|^)' + cls + '(\\s|$)'), target = (typeof el.className === undefined) ? window.event.srcElement : el; return target.className.match(regexp); } function addClass(element, classname){ var currentClassList = (element.className || '').split(/\s+/); currentClassList .push(currentClassList.indexOf(classname) > -1 ? '' : classname); element.className = currentClassList.join(' ').trim(); } function removeClass(el, classNameToRemove){ var elClass = ' ' + el.className + ' '; while(elClass.indexOf(' ' + classNameToRemove + ' ') !== -1){ elClass = elClass.replace(' ' + classNameToRemove + ' ', ''); } el.className = elClass; }