为了账号安全,请及时绑定邮箱和手机立即绑定

为什么显示是1 跟 0

/ 猿问

为什么显示是1 跟 0

阿尼加得 2019-01-09 13:11:22

<!DOCTYPE html>

<html>


<head>

<meta charset="utf-8" />

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<title>Page Title</title>

<meta name="viewport" content="width=device-width, initial-scale=1">

<script>

window.onload = function() {

var len1 = getByClass('on', 'list');

alert(len1.length); // 结果等于2为正确

var len2 = getByClass('on');

alert(len2.length); // 结果等于3为正确

}


function getByClass(clsName, parent) {

//定义函数getByClass

var oP = parent ? document.getElementById(parent) : document;

//是一个判断语句,如果传入parent即parent存在,那么var op = document.getElementById(parent),不存在的话就是var op = document

var a = oP.getElementsByTagName('*');

var b = new Array();

for (var i = 0; i < a.length; i++) {

if (a[i].className == clsName) {

b.push(a[i]);

}

return b;

}

}

</script>

</head>


<body>

<ul id="list">

<li class="on">1</li>

<li class="select">2</li>

<li class="on">3</li>

<li>4</li>

</ul>

<p class="on">class为on的p标签</p>

</body>


</html>


查看完整描述

2 回答

?
垣木_v

因为getByClass函数调用的第一次,传入了一个id,一个class,函数中,符合条件,向数组b添加一个元素,所以数组长度为1,执行第二次循环的时候,不符合条件,return直接结束循环,所以第一个为1.

调用函数第二次,你就传了一个on,所以现在op为document,a为html文档中所有的dom元素,长度为14,当你循环的时候,循环第一次,不满足if判断,直接走return,然后结束所有循环,所有数组中没有元素,长度为0.

你这边最重要的问题是没有理解return的意思,它可以返回函数的值,但是当return一用,后面的代码都不执行。

查看完整回答
1 反对 回复 2019-01-09
?
__innocence
return b 需要放在for循环外面。


查看完整回答
1 反对 回复 2019-01-09

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信