jQuery的纯JavaScript等价物是什么;s.parents()方法?

jQuery的纯JavaScript等价物是什么;s.parents()方法?,javascript,jquery,code-translation,Javascript,Jquery,Code Translation,对于此类问题,我深表歉意,但我无法在网上或其他任何地方找到答案,我真的很想知道: jQuery的.parents()方法的纯JavaScript等价物是什么? 例如,如果知道如何在纯JavaScript中实现这一点,那就太好了: jQuery(element).parents('.className'); DOM API中没有一个函数/属性等同于jQuery的parents()。有parentNode属性(以及作为parentElement属性,它将阻止您从document.documentE

对于此类问题,我深表歉意,但我无法在网上或其他任何地方找到答案,我真的很想知道:

jQuery的.parents()方法的纯JavaScript等价物是什么?

例如,如果知道如何在纯JavaScript中实现这一点,那就太好了:

jQuery(element).parents('.className');

DOM API中没有一个函数/属性等同于jQuery的
parents()
。有
parentNode
属性(以及作为
parentElement
属性,它将阻止您从
document.documentElement
document
),它是您访问它的元素的父节点(或父元素),如果它没有父节点,则为
null
。要大致匹配jQuery的
parents()
,您可以在其上循环(例如,获取
parentNode的
parentNode
/
parentElement
,等等)以查找所有父节点。同样,在每个级别的模糊现代浏览器上,您都可以使用它来检查父级是否匹配选择器(当您传递选择器时,将jQuery的行为与
parents()
匹配)

jQuery采用基于集合的方法进行DOM操作和遍历,而DOM API则采用按元素/节点的方法

例如:

var elm=document.getElementById(“目标”);
var parents=getParents(elm);
console.log(Array.prototype.map.call(
父母
职能(e){
返回e.nodeName+(e.id?#“+e.id:”);
}
).加入(“,”);
函数getParents(e){
var结果=[];
for(var p=e&&e.parentElement;p;p=p.parentElement){
结果:推挤(p);
}
返回结果;
}

Node.parentNode 当您通过某种方法(
document.getElementById()
document.querySelector()
,等等)获取HTML时,它将返回一个节点对象,该对象的
.parentNode
属性就是父节点对象


要获取所有父节点,类似于jQuery的
.parents()

我不久前写过这个函数:

function parents(node) {
   let current = node,
       list    = [];
   while(current.parentNode != null && current.parentNode != document.documentElement) {
     list.push(current.parentNode);
     current = current.parentNode;
   }
    return list
}

请注意,这只是一个轻微的测试,所以请对此持保留态度。

“jQuery的.parents()方法的纯JavaScript等价物是什么?”没有。你的意思是“jQuery的
parents()
方法的DOM API版本是什么?”
while((element=element.parentElement)){if(element.matches('.className')){result.push(element)}
我很确定这是一个重复的,但我找不到它。你可以随时查看jQuery的github以获取它们的源代码:->啊,是的,这与我所寻找的并不完全相同,尽管您可以使用.parentNode属性递归地向后遍历DOM,以实现与jQuery.parents()方法类似的功能。但这需要编写一些代码。我当然不会因此而投反对票,不过。@t.J.Crowder表示同意。使用
parentElement
将向下表决改为苛刻:-)无需检查
!=文档
。我最初是递归编写的,而不是循环使用
parentElement
而不是
parentNode
,以避免
文档
@Oriol:这需要比
匹配
/
匹配选择器更现代的浏览器
though@Bergi也许,如果您考虑非标准名称与供应商前缀。code>parentElement
不需要它,并且比
匹配项有更多的支持
@Oriol:Ooops,对了,我将
匹配选择器
匹配项
支持混合在一起。