请老师帮忙看一下哪里错了,我基本是依葫芦画瓢的,依然实现不了
完全看不懂啊,我大概能理解一层层往里,从html到title这里能理解,但是for执行完了之后,是怎么跳回去重新再循环一次,打印body之内的节点的呢?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>节点遍历</title>
</head>
<body>
<div>
<p>
<span>
<a href=""></a>
<a href=""></a>
<a href=""></a>
</span>
<span>
<a href=""></a>
<a href=""></a>
<a href=""></a>
</span>
<span>
<a href=""></a>
<a href=""></a>
<a href=""></a>
</span>
</p>
</div>
<script>
myReady(function(){
var s="";
function travel(space,node){
if(node.tagName){
s+=space+node.tagName+"<br/>";
}
var len=node.childNodes.length;
for(var i=0;i<len;i++){
travel(space+"*",node.childNodes[i])
}
}
travel("",document);
document.write(s)
})
</script>
</body>
</html>
正在回答
同学你好,
课程中老师将script标签添加在了head中,按照文档加载顺序,DOM还没有加载完就会执行,元素可能获取不到。所以老师封装了一个方法。
domReady.js中是老师封装了一个myReady , 这个方法实际上实现的效果就是$(document).ready(function(){}) , 让DOM加载完后再去执行js代码 。
因为现在还没有学习到jQuery , 所以这里老师为了方便课程讲解自己封装了一个类似的方法 。这里同学对 domReady.js简单了解一下即可,不需要深入研究。后期学了jQuery,使用$(document).ready(function(){}) 就可以啦 。
如果要使用的话在下载源码即可。如果不使用这个封装方法,将script标签放在body底部即可。
祝学习愉快!
同学你好,
1、在2-1视频中老师引入了一个js文件:
这个文件中封装了文档就绪函数,也就是myReady,需要将代码写在这个方法中。
如果同学想要这个函数的话,可以从源码中下载进行使用:
引入js文件之后才能用这个函数哦,否则就会报错。
2、同学的代码中因为没有引入课程中的js文件,直接用了封装了函数,所以没有效果,可以将函数去掉。script标签在body底部,DOM结构加载完成之后才会执行,所以不写文档就绪函数也是可以的。去掉函数之后效果就没有问题了:
3、可以参考下面的解释:
// myReady(function() { var s = ""; function travel(space, node) { if (node.tagName) { s += space + node.tagName + "<br/>"; } console.log(node.childNodes) var len = node.childNodes.length; for (var i = 0; i < len; i++) { travel(space + "*", node.childNodes[i]) } } travel("", document); document.write(s) //开始传入的节点是document,没有节点名称,所以会跳过if执行下面代码,获取子节点长度为2,一个文档声明,一个html节点,长度为2,进行for循环,调用travel方法, //文档声明没有节点名称所以会跳过if判断,也没有子节点,所以会跳过for循环结束;html有节点名称,进入if判断进行拼接:s=''*+html+换行。html的子节点有3个head,text(换行),body,然后进行for循环调用travel方法。 //首先是head节点,travel中传入的参数为(''**,head),''*是html调用travel函数的时候传入的第一个参数,所以后面再拼接一个*,head有节点名称,s=''*+html+换行+''**+head+换行。head有5个子节点:文本(换行),meta,文本(换行),title,文本(换行).文本节点没有名称也没有子节点,所以跳过。meta和title就会执行travel函数,最后一个文本节点也会跳过。 //head中子节点执行完毕了,就会执行html中第二个子节点,也就是文本节点,跳过. //最后是body节点,依次类推 // // }) </script>
因为一开始html有3个子节点,当head节点中子节点执行完毕之后,就会执行html中第二个子节点,然后是第二个子节点。
自己再测试理解下,祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星