58 lines
1.3 KiB
JavaScript
58 lines
1.3 KiB
JavaScript
/**
|
|
* Get all DOM element up the tree that contain a class, ID, or data attribute
|
|
* @param {Node} elem The base element
|
|
* @param {String} selector The class, id, data attribute, or tag to look for
|
|
* @return {Array} Null if no match
|
|
*/
|
|
var getParents = function (elem, selector) {
|
|
|
|
var parents = [];
|
|
var firstChar;
|
|
if (selector) {
|
|
firstChar = selector.charAt(0);
|
|
}
|
|
|
|
// Get matches
|
|
for (; elem && elem !== document; elem = elem.parentNode) {
|
|
if (selector) {
|
|
|
|
// If selector is a class
|
|
if (firstChar === '.') {
|
|
if (elem.classList.contains(selector.substr(1))) {
|
|
parents.push(elem);
|
|
}
|
|
}
|
|
|
|
// If selector is an ID
|
|
if (firstChar === '#') {
|
|
if (elem.id === selector.substr(1)) {
|
|
parents.push(elem);
|
|
}
|
|
}
|
|
|
|
// If selector is a data attribute
|
|
if (firstChar === '[') {
|
|
if (elem.hasAttribute(selector.substr(1, selector.length - 1))) {
|
|
parents.push(elem);
|
|
}
|
|
}
|
|
|
|
// If selector is a tag
|
|
if (elem.tagName.toLowerCase() === selector) {
|
|
parents.push(elem);
|
|
}
|
|
|
|
} else {
|
|
parents.push(elem);
|
|
}
|
|
|
|
}
|
|
|
|
// Return parents if any exist
|
|
if (parents.length === 0) {
|
|
return null;
|
|
} else {
|
|
return parents;
|
|
}
|
|
|
|
}; |