gpt4 book ai didi

javascript - 纯 Javascript 得到 parent

转载 作者:行者123 更新时间:2023-12-01 02:42:49 25 4
gpt4 key购买 nike

我根据 .parents() without jquery - or querySelectorAll for parents 创建了一个片段

  function getParents (el, _class) {
let doc = document
let parents = []
let p = el.parentNode

while (p !== doc) {
let o = p
parents.push(o)
p = o.parentNode
}
parents.push(doc)
return parents[parents.map(x => x.className).indexOf(_class)]
}

document.querySelectorAll('.child1').forEach((e,i)=>{
console.log(getParents(e, 'child4'))
})
<div class="parent">
<div class="child5">
<div class="child4">
<div class="child3">
<div class="child2">
<div class="child1">
1
</div>
</div>
</div>
</div>
</div>
</div>


<div class="parent">
<div class="child5">
<div class="child4">
<div class="child3">
<div class="child2">
<div class="child1">
2
</div>
</div>
</div>
</div>
</div>
</div>


<div class="parent">
<div class="child5">
<div class="child4 hello"> <!-- problem here -->
<div class="child3">
<div class="child2">
<div class="child1">
3
</div>
</div>
</div>
</div>
</div>
</div>

如果<div class="child4 hello">没有hello我可以得到所有 child4 , 如果 hello或添加任何其他内容,我无法获得 child4 .我用 indexOf()我认为不应该是 -1或未定义。有人可以纠正我错误在哪里吗?谢谢

最佳答案

问题是您获取了一个元素列表,并将这些元素映射到元素的 className,而目标元素只有 child4 > 类,数组中的值将为 child4 hello,当您在数组中查找 child4 值的索引时,child4 hello 不匹配。您可以使用 Array.find 而不是 Array.indexOf

  function getParents (el, _class) {
let doc = document
let parents = []
let p = el.parentNode

while (p !== doc) {
let o = p
parents.push(o)
p = o.parentNode
}
parents.push(doc)
return parents.find(e => e.className.includes(_class))
}

document.querySelectorAll('.child1').forEach((e,i)=>{
console.log(getParents(e, 'child4'))
})
<div class="parent">
<div class="child5">
<div class="child4">
<div class="child3">
<div class="child2">
<div class="child1">
1
</div>
</div>
</div>
</div>
</div>
</div>


<div class="parent">
<div class="child5">
<div class="child4">
<div class="child3">
<div class="child2">
<div class="child1">
2
</div>
</div>
</div>
</div>
</div>
</div>


<div class="parent">
<div class="child5">
<div class="child4 hello"> <!-- problem here -->
<div class="child3">
<div class="child2">
<div class="child1">
3
</div>
</div>
</div>
</div>
</div>
</div>

您可以使用 Element.closest 而不是 getParents 函数

这是一个例子:

const parents = Array.from(document.querySelectorAll('.child1')).map(e => e.closest('.child4'));
console.log(parents);
<div class="parent">
<div class="child5">
<div class="child4">
<div class="child3">
<div class="child2">
<div class="child1">
1
</div>
</div>
</div>
</div>
</div>
</div>


<div class="parent">
<div class="child5">
<div class="child4">
<div class="child3">
<div class="child2">
<div class="child1">
2
</div>
</div>
</div>
</div>
</div>
</div>


<div class="parent">
<div class="child5">
<div class="child4 hello">
<!-- problem here -->
<div class="child3">
<div class="child2">
<div class="child1">
3
</div>
</div>
</div>
</div>
</div>
</div>

如@Khauri 所述,在第一个示例中,与其使用 className 属性并使用字符串函数来检查该值是否匹配,不如使用 classList 属性,因为它具有 contains 功能。

关于javascript - 纯 Javascript 得到 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56597542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com