纯Javascript得到父母
我创建了一个基于 函数getParents(el,_类){ 让doc=文档 让父母=[] 设p=el.parentNode while(p!==doc){ 设o=p 父母。推(o) p=o.parentNode } 家长推送(doc) 返回parents[parents.map(x=>x.className).indexOf(\u类)] } document.querySelectorAll('.child1').forEach((e,i)=>{ log(getParents(e,'child4')) })纯Javascript得到父母,javascript,Javascript,我创建了一个基于 函数getParents(el,_类){ 让doc=文档 让父母=[] 设p=el.parentNode while(p!==doc){ 设o=p 父母。推(o) p=o.parentNode } 家长推送(doc) 返回parents[parents.map(x=>x.className).indexOf(\u类)] } document.querySelectorAll('.child1').forEach((e,i)=>{ log(getParents(e,'child
1.
2.
3.
问题在于,您正在获取一个元素列表,并将这些元素映射到元素的className
,当目标元素的数量超过child4
类时,数组中的值将是child4 hello
,当您在数组中查找child4
值的索引时,child4 hello
不匹配。您可以使用Array.find
而不是Array.indexOf
函数getParents(el,_类){
让doc=文档
让父母=[]
设p=el.parentNode
while(p!==doc){
设o=p
父母。推(o)
p=o.parentNode
}
家长推送(doc)
返回parents.find(e=>e.className.includes(_class))
}
document.querySelectorAll('.child1').forEach((e,i)=>{
log(getParents(e,'child4'))
})
1.
2.
3.
您可以像这样使用阵列原型的findIndex
:
returnparents[parents.map(x=>x.className).findIndex(x=>x.indexOf(\u class)>-1)]
函数getParents(el,_类){
让doc=文档
让父母=[]
设p=el.parentNode
while(p!==doc){
设o=p
父母。推(o)
p=o.parentNode
}
家长推送(doc)
返回parents[parents.map(x=>x.className).findIndex(x=>x.indexOf(_class)>-1)]
}
document.querySelectorAll('.child1').forEach((e,i)=>{
log(getParents(e,'child4'))
})
1.
2.
3.
问题是,当您执行parents.map(x=>x.className)
操作时,您将得到一个数组,其中包含每个元素的完整类字符串。因此,结果看起来像(简化的)[“child4 hello”]
,您尝试在该数组上执行indexOf(“child4”)
。因为没有一个成员是“child4”,所以失败了
下面是所示的问题代码:
函数getParents(el,_类){
让doc=文档
让父母=[]
设p=el.parentNode
while(p!==doc){
设o=p
父母。推(o)
p=o.parentNode
}
家长推送(doc)
让mappedClassName=parents.map(x=>x.className)
log(“mappedClassName”,mappedClassName)
设indexOf=mappedClassName.indexOf(_类);
log(“indexOf”,indexOf)
返回父项[indexOf]
}
document.querySelectorAll('.child1').forEach((e,i)=>{
log(getParents(e,'child4'))
})
3.
用于添加对查询的支持
家长
函数getParents(el,查询){
让父母=[]
while(el.parentNode!==document.body){
el.matches(查询)和parents.push(el)
el=el.parentNode
}
回归父母
}
document.querySelectorAll('.child1').forEach((e,i)=>{
console.log(getParents(e,'.child4'))
})
1.
2.
3.
在这里更好<当搜索包含子字符串而不是特定类的类名时,code>className.includes将返回true。例如,child4中的“child”