Monday, May 13, 2024
 Popular · Latest · Hot · Upcoming
125
rated 0 times [  132] [ 7]  / answers: 1 / hits: 36705  / 12 Years ago, fri, october 19, 2012, 12:00:00

Possible Duplicate:

Check event.target.parentElement with matchesSelector js






I have a dom object, I'd like to match its parents, all parents, against a selector, like querySelectAll(), but for parents instead of children. Similar to jQuery's .parents('selector') method, but I do NOT need any back-wards compatibility. Also, no libraries please. I will totes take a boolean return value.



I CAN write this myself as a recursive function/for/while using matchesSelector(). I'm looking for little-known methods or more efficient code.



Saving any processing is worth it. Think tens of thousands of match checks, or more even.


More From » parent

 Answers
20

You would want to use a while() loop since we don't know the exact number of parents we have


jsFiddle Demo


function getParents(el, parentSelector /* optional */) {

// If no parentSelector defined will bubble up all the way to *document*
if (parentSelector === undefined) {
parentSelector = document;
}

var parents = [];
var p = el.parentNode;

while (p !== parentSelector) {
var o = p;
parents.push(o);
p = o.parentNode;
}
parents.push(parentSelector); // Push that parentSelector you wanted to stop at

return parents;
}

Useage: Returns an Array of "parents"


// 2nd param optional, bubbles up to document
getParents( document.getElementById('me') );

// get all parents starting from -me- up to ID -outerParent-
getParents( document.getElementById('me'), document.getElementById('outerParent') );

[#82469] Thursday, October 18, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
benitoh

Total Points: 150
Total Questions: 113
Total Answers: 104

Location: India
Member since Wed, Aug 26, 2020
4 Years ago
benitoh questions
Sun, Mar 21, 21, 00:00, 3 Years ago
Mon, May 13, 19, 00:00, 5 Years ago
;