<html id="myhtml">
<head >
<title>adsfaf</title>
</head>
<body>
<div>dasf<em>dsfa</em>dfsaf</div>
<script language="javascript">var myall=new Array();
function addtomyall(element){
myall[myall.length]=element;
for(var i=0; i<element.children.length; i++)
addtomyall(element.children[i]);}addtomyall(myhtml);var s="";
for(i=0; i<myall.length; i++)
s +=myall[i].tagName + " ";
alert(s);
</script>
</body>
</html>
中的script代码该怎样理解?element是变量吗?还是一直被赋值为myhtml?其中myall[myall.length]=element;中的myall.length是怎么样计数的?还有就是结果中的html这个元素为什么不是显示的myhtml这个元素?
<head >
<title>adsfaf</title>
</head>
<body>
<div>dasf<em>dsfa</em>dfsaf</div>
<script language="javascript">var myall=new Array();
function addtomyall(element){
myall[myall.length]=element;
for(var i=0; i<element.children.length; i++)
addtomyall(element.children[i]);}addtomyall(myhtml);var s="";
for(i=0; i<myall.length; i++)
s +=myall[i].tagName + " ";
alert(s);
</script>
</body>
</html>
中的script代码该怎样理解?element是变量吗?还是一直被赋值为myhtml?其中myall[myall.length]=element;中的myall.length是怎么样计数的?还有就是结果中的html这个元素为什么不是显示的myhtml这个元素?
解决方案 »
- showbo大神,帮我看看样式问题
- 类似webqq的效果
- 正则问题
- 有关正则式一问,还请指点,谢谢!
- 怎样在服务端写调用JavaScript的方法
- IE高级问题! 请大虾指教! 在线等!!!!!!!
- 如何通过XMLHTTP对象从服务器获取XML文档?望高手赐教??(服务器脚本和客户脚本如何实现)
- JavaScript有哪些帮助文档?
- 给textarea添加了keyup监听后,不能使用Ctrl+z回退功能了,求救!
- 小白求助~No 'Access-Control-Allow-Origin' header is present on the requested resourc
- _onclick是什么意思
- 正则求教
<html id="myhtml">然后就是
addtomyall(myhtml); addtomyall这个函数就是一个递归的调用,一直把html及其下所有子元素放到myall这个数组里面,element这个变量在递归依次为HTML HEAD TITLE BODY DIV EM SCRIPT 这几个元素(当然这也是运行结果)由于数组的第一个元素的下标为0,而数组的长度是从1开始计起的,myall[myall.length]=element就是动态地增加myall这个数组还有就是结果中的html这个元素为什么不是显示的myhtml这个元素?这句我还不懂你问什么。
还有就是结果中的html这个元素为什么不是显示的myhtml这个元素?这个问题就是说在element这个变量被赋予myhtml后在后面的myall[myall.length]=element;中最后运行的结果应该是myall[0]=myhtml啊,怎么会是元素标签html呢?除非是后面的tagname在起作用,将这个id=myhtml又变成了html
2.确实是tagname在起作用PS:建议你安装firefox+firebug吧
<head >
<title>
adsfaf
</title>
</head>
<body>
<div>
dasf
<em>
dsfa
</em>
dfsaf
</div>
<script language="javascript">
<!--
var myall=new Array();
function addtomyall(element){
myall[myall.length]=element;
for(var i=0; i<element.children.length; i++)
addtomyall(element.children[i]);
}
addtomyall(myhtml); var s="";
for(i=0; i<myall.length; i++)
s +=myall[i].tagName + " ";
alert(s);
-->
</script>
</body>
</html>
注释:
1、在DOM中HTML文档的潜入标记的层级结构表示成对象的一棵树,HTML的这棵树的表示包含了表示HTML标记和元素的节点,以及表示文本的串的节点。
2、直接位于一个结点的下层的节点是该结点的子节点,也就是children。
3、Element是一个文档树的根结点,tagName是Element的标记名,id属性给该元素指定唯一的一个名称,让我们可以找到它。
4、所有Node对象文档都有一个childrenNodes[]的数组,该数组包含那个节点的子节点,但是IE4不支持该数组,它提供了一个跟该数组很类似的一个数组children[],也就是你上面程序出现的。
5、myall.length是你创建的那个数组对象myall[]的长度,因为数组的下标是从0开始的,所以数组中的最后一个元素是myall[myall.length-1],myall[myall.length]=element;就是给这个数组增加了一个元素。
下面跟你说说运行过程:
第一步:创建一个数组,定义一个函数,函数的参数为文档树的节点,然后调用该函数addtomyall(myhtml),通过“myhtml”找到了节点html;
第二步:节点html作为elemnt的值传函数,数组有了一个元素html,然后进入for循环,此时element.children.length=2;当1=0时,节点html的第一个孩子head作为作为elemnt的值传函数,数组有了二个元素head。
第三步:head有又孩子title,然后有递归调用addtomycall()函数,title下面的孩子已经不是element对象了,而是text对象,所以结束这一层递归,回到head那一层,执行i++,i就等于1,head只有一个element对象的孩子,此时i不小于element.children.length,退出回到head那一层,执行i++,i=1<2,所以就开始body那边的递归了,然后是script,跟head这边是一样的,我就不多说了。。
最后一步:就是将数组中每个元素的值(也就是给文档树的每个节点:html,head,title。body,div,em,script)的tagName属性,就是他们的元素名称赋给字符串s返回。
说了这么多,希望对楼主有帮助。