Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
纯Javascript得到父母_Javascript - Fatal编程技术网

纯Javascript得到父母

纯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

我创建了一个基于

函数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')) })

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”