.parents() 没有 jquery - 或者为父母的 querySelectorAll [重复]
Posted
技术标签:
【中文标题】.parents() 没有 jquery - 或者为父母的 querySelectorAll [重复]【英文标题】:.parents() without jquery - or querySelectorAll for parents [duplicate] 【发布时间】:2012-10-10 11:01:21 【问题描述】:可能重复:Check event.target.parentElement with matchesSelector js
我有一个 dom 对象,我想匹配它的父母,所有父母,与一个选择器,如querySelectAll()
,但对于父母而不是孩子。类似于 jQuery 的 .parents('selector')
方法,但我不需要任何向后兼容性。另外,请不要图书馆。我将 totes 取一个布尔返回值。
我可以自己将其编写为递归函数/for/while 使用 matchesSelector()
。我正在寻找鲜为人知的方法或更高效的代码。
保存任何处理都是值得的。想想数以万计的匹配检查,甚至更多。
【问题讨论】:
你自己写的代码在哪里? (以便人们可以帮助指出缺陷/添加改进) 这看起来与您之前询问的问题相同:***.com/questions/12977658/… @user1689607 哈!是的,看起来是这样......我在这里的想法略有不同。我忘记了 jQuery 的父母方法。唉...盯着同一个代码这么久我已经忘记了世界其他地方的存在... @mcpDESIGNS 我说我可以,但我没有。但我想`for()` @Pancho 因为他希望 所有 父母从选择器中 UP。我更新了答案以包含一个可选的第二个参数,您还可以在其中选择您希望它停止将父级添加到数组的位置。 :) 【参考方案1】:您可能希望使用while()
循环,因为我们不知道我们拥有的确切父母数量
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:返回一个“父母”数组
// 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') );
【讨论】:
以上是关于.parents() 没有 jquery - 或者为父母的 querySelectorAll [重复]的主要内容,如果未能解决你的问题,请参考以下文章
jQuery中的parent()和parents()有啥区别呢?