Javascript 正在尝试重新创建getElementsByClassName 函数getElementsByCassName(cls){ 常量结果=[]; 常量checkClass=(元素)=>{ const children=element.children; for(设i=0;i=0); }) ); } 函数查询(收集器、elm/*、idx、收集器*/){ if(doesMatchClassNameQuery(getClassList(elm.className))){ 收集器推送(elm); } //递归查询。 返回collector.concat(Array.from(elm.children).reduce(query,[]); } //开始查询。 返回Array.from((node&&node.children)| |[]).reduce(query,[]); } console.log( document.body.getElementsByClassName('baz bizz') ); console.log( getElementsByClassName(document.body,'baz bizz') ); console.log( document.body.getElementsByClassName('foo') ); console.log( getElementsByClassName(document.body,“foo”) ); log(getElementsByClassName()); log(getElementsByClassName(null,'bar'); log(getElementsByClassName(document.body)); console.log(document.body.getElementsByClassName(“”)) .as控制台包装{最小高度:100%!重要;顶部:0;}

Javascript 正在尝试重新创建getElementsByClassName 函数getElementsByCassName(cls){ 常量结果=[]; 常量checkClass=(元素)=>{ const children=element.children; for(设i=0;i=0); }) ); } 函数查询(收集器、elm/*、idx、收集器*/){ if(doesMatchClassNameQuery(getClassList(elm.className))){ 收集器推送(elm); } //递归查询。 返回collector.concat(Array.from(elm.children).reduce(query,[]); } //开始查询。 返回Array.from((node&&node.children)| |[]).reduce(query,[]); } console.log( document.body.getElementsByClassName('baz bizz') ); console.log( getElementsByClassName(document.body,'baz bizz') ); console.log( document.body.getElementsByClassName('foo') ); console.log( getElementsByClassName(document.body,“foo”) ); log(getElementsByClassName()); log(getElementsByClassName(null,'bar'); log(getElementsByClassName(document.body)); console.log(document.body.getElementsByClassName(“”)) .as控制台包装{最小高度:100%!重要;顶部:0;},javascript,dom,Javascript,Dom,大家好 据我所知,childNodes有一些未定义的节点,例如无法通过.contain方法的“text” 所以我从childNodes切换到childNodes,然后我仍然得到如下相同的错误消息 function getElementsByClassName(cls) { const result = []; const checkClass = (element) => { const children = element.children; for (let i

大家好

据我所知,childNodes有一些未定义的节点,例如无法通过.contain方法的“text”

所以我从childNodes切换到childNodes,然后我仍然得到如下相同的错误消息

function getElementsByClassName(cls) {
  const result = [];
  const checkClass = (element) => {
    const children = element.children;
    for (let i = 0; i < children.length; i++) {
      if()
        if (children[i].contains(cls)) {
          result.push(children[i]); 
        }
      if (children[i].hasChildNodes()) {
     
        checkClass(children[i]);      }
    }
  };
  checkClass(document.body); 
  return result;
}
getElementsByClassName(“targetClassName”)
VM1349:8未捕获类型错误:未能在“节点”上执行“包含”:参数1不是“节点”类型。
在检查课上(:8:23)
在getElementsByClassName(:18:3)
时间:1:1
我理解这个问题与遍历节点列表,然后尝试应用contains有关,但我不明白为什么它在切换到元素而不是节点后不会执行它

请告知

据我所知,childNodes有一些未定义的节点,例如无法通过.contain方法的“text”

我不知道“未定义的节点”是什么意思,但是文本节点是
包含的
的完全有效的参数:

const div=document.getElementById(“x”);
const text=div.firstChild;
console.log(text.nodeName);//#文本
console.log(div.contains(text));//正确
foo
据我所知,childNodes有一些未定义的节点,例如无法通过.contain方法的“text”

我不知道“未定义的节点”是什么意思,但是文本节点是
包含的
的完全有效的参数:

const div=document.getElementById(“x”);
const text=div.firstChild;
console.log(text.nodeName);//#文本
console.log(div.contains(text));//正确
foo
/。。。非实时收集方法。。。
//
//-不“知道”`String.prototype.trim`,
//-不知道“Array.prototype.includes”。。。
// - ... 以及'Element.prototype.classList'的`
//
函数getElementsByClassName(节点,类名){
常量regXSplitWS=(/\s+/);
常量regxtrimleet=(/^\s+/);
常量regXTrimRight=(/\s+$/);
功能微调(str){
返回str.replace(regxtrimlight.)。replace(regxtrimlight.);
}
函数getClassList(str){
str=修剪(字符串(str | |'');
返回(
(!str&&[]))||
str.split(regXSplitWS)
);
}
const classList=getClassList(className);
函数doesMatchClassNameQuery(elmClassList){
返回(
!!elmClassList.length&&
!!classList.length&&
classList.every(函数(queryName){
返回值(elmClassList.indexOf(queryName)>=0);
})
);   
}
函数查询(收集器、elm/*、idx、收集器*/){
if(doesMatchClassNameQuery(getClassList(elm.className))){
收集器推送(elm);
}
//递归查询。
返回collector.concat(Array.from(elm.children).reduce(query,[]);
}
//开始查询。
返回Array.from((node&&node.children)| |[]).reduce(query,[]);
}
console.log(
document.body.getElementsByClassName('baz bizz')
);
console.log(
getElementsByClassName(document.body,'baz bizz')
);
console.log(
document.body.getElementsByClassName('foo')
);
console.log(
getElementsByClassName(document.body,“foo”)
);
log(getElementsByClassName());
log(getElementsByClassName(null,'bar');
log(getElementsByClassName(document.body));
console.log(document.body.getElementsByClassName(“”))
.as控制台包装{最小高度:100%!重要;顶部:0;}

/。。。非实时收集方法。。。
//
//-不“知道”`String.prototype.trim`,
//-不知道“Array.prototype.includes”。。。
// - ... 以及'Element.prototype.classList'的`
//
函数getElementsByClassName(节点,类名){
常量regXSplitWS=(/\s+/);
常量regxtrimleet=(/^\s+/);
常量regXTrimRight=(/\s+$/);
功能微调(str){
返回str.replace(regxtrimlight.)。replace(regxtrimlight.);
}
函数getClassList(str){
str=修剪(字符串(str | |'');
返回(
(!str&&[]))||
str.split(regXSplitWS)
);
}
const classList=getClassList(className);
函数doesMatchClassNameQuery(elmClassList){
返回(
!!elmClassList.length&&
!!classList.length&&
classList.every(函数(queryName){
返回值(elmClassList.indexOf(queryName)>=0);
})
);   
}
函数查询(收集器、elm/*、idx、收集器*/){
if(doesMatchClassNameQuery(getClassList(elm.className))){
收集器推送(elm);
}
//递归查询。
返回collector.concat(Array.from(elm.children).reduce(query,[]);
}
//开始查询。
返回Array.from((node&&node.children)| |[]).reduce(query,[]);
}
console.log(
document.body.getElementsByClassName('baz bizz')
);
console.log(
getElementsByClassName(document.body,'baz bizz')
);
console.log(
document.body.getElementsByClassName('foo')
);
console.log(
getElementsByClassName(document.body,“foo”)
);
log(getElementsByClassName());
log(getElementsByClassName(null,'bar');
log(getElementsByClassName(document.body));
console.log(document.body.getElementsByClassName(“”))
.as控制台包装{最小高度:100%!重要;顶部:0;}


这不可能是您的真实代码,因为
if()
是一个语法错误。要处理的实体不公开
包含
属性,但必须具有
类名
和/或
类列表
属性,后者不能通过
包含来查找
getElementsByClassName("targetClassName")

VM1349:8 Uncaught TypeError: Failed to execute 'contains' on 'Node': parameter 1 is not of type 'Node'.
    at checkClass (<anonymous>:8:23)
    at getElementsByClassName (<anonymous>:18:3)
    at <anonymous>:1:1