我有一个 dom 对象,我想匹配它的父母,所有父母,反对一个选择器,比如querySelectAll()
,但对于父母而不是孩子。类似于 jQuery 的.parents('selector')
方法,但我不需要任何向后兼容性。另外,请不要图书馆。我将 totes 取一个布尔返回值。
我可以自己将其编写为递归函数/for/while 使用matchesSelector()
. 我正在寻找鲜为人知的方法或更高效的代码。
节省任何处理都是值得的。想想数以万计的匹配检查,甚至更多。
我有一个 dom 对象,我想匹配它的父母,所有父母,反对一个选择器,比如querySelectAll()
,但对于父母而不是孩子。类似于 jQuery 的.parents('selector')
方法,但我不需要任何向后兼容性。另外,请不要图书馆。我将 totes 取一个布尔返回值。
我可以自己将其编写为递归函数/for/while 使用matchesSelector()
. 我正在寻找鲜为人知的方法或更高效的代码。
节省任何处理都是值得的。想想数以万计的匹配检查,甚至更多。
您会想要使用while()
循环,因为我们不知道我们拥有的确切父母数量
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;
}
// 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') );