jQuery的纯JavaScript等价物是什么;s.parents()方法?
对于此类问题,我深表歉意,但我无法在网上或其他任何地方找到答案,我真的很想知道: jQuery的.parents()方法的纯JavaScript等价物是什么? 例如,如果知道如何在纯JavaScript中实现这一点,那就太好了: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(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,对了,我将匹配选择器
与匹配项
支持混合在一起。