2、
<body>
<ul id="father">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<ul class="father2">
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
<script>
//获取父节点
let ul = document.getElementsByTagName('ul');
//获取所有子节点
// let son = document.body.childNodes;
let son = ul.childNodes;
console.log(son);//undifined
console.log(son.length);
//------------------------------------------
let ul2 = document.getElementsByClassName('father2');
console.log(ul2.childNodes.length);
//控制台报错
//Uncaught TypeError: Cannot read properties of undefined (reading 'length')
console.log(ul2.childNodes);
</script>
3、而当我通过getElementById的方式就可以得到
//获取父节点
let ul = document.getElementById('father');
//获取所有子节点
// let son = document.body.childNodes;
let son = ul.childNodes;
console.log(son);
console.log(son.length);
问题出在:getElementsByTagName和getElementsByClassName返回的是数组,因此使用document.getElementsByTagName('ul')[0]
// 正确写法
//获取父节点
let ul = document.getElementsByTagName('ul')[0];
//获取所有子节点
// let son = document.body.childNodes;
let son = ul.childNodes;
console.log(son);//undifined
console.log(son.length);
//------------------------------------------
let ul2 = document.getElementsByClassName('father2')[0];
console.log(ul2.childNodes.length);
console.log(ul2.childNodes);
getElementsByTagName和getElementsByClassName返回的是数组吧,id具有唯一性返回的应该是对象,你可以console.log(ul) 看看getElementsByTagName和getElementsByClassName的返回值是什么