<script type="text/javascript">
var str="";
function listNode(node,level)
{
printInfo(node,level);
level++;
var nodess=node.childNodes;
for(var x=0;x<nodess.length;x++)
{
if(nodess[x].hasChildNode())
listNode(nodess[x],level);
else
printInfo(nodess[x],level);
}
}
function getSpace(level){
var s="";
for(var x=0;x<level;x++){
s +="|---";
}
return s;
}
function printInfo(node,level){
str=str+getSpace(level)+"name:"+node.nodeName+"<br/>";
}
function getNodes(){
listNode(document,0);
document.write(str);
}
</script>
</head>
<body>
<input type="button" value="test" onclick="demo()">
有两个问题 !1.node.hasChildNode()这个方法API上是说返回值为true or false 但是我感觉我的if(node.hasChildNode())不执行呢 求教 谢谢你们
2.还有就是我的str 感觉不是全局的 printInfo()和getNodes()里的str感觉不是一个 最后数不出网页的标签呢!!!谢谢你们啊
hasChildNode 打错了,是 hasChildNodes
因为打错了,所以程序报错了;既然报错,程序无法往下执行,也就进不了 else 分支 printInfo(nodess[x],level);str 是全局的
如果你想获取网页的所有标签,可以使用 document.getElementsByTagName('*')
如果你想获取具体某个标签下的所有标签,比如获取 body 下的所有子标签,可以使用 document.body.getElementsByTagName('*')
getElement 系列函数返回的都不是数组,而且每次遍历都会重新获取一下,所以建议需要遍历的时候,先转成数组;比如:
var tags = document.getElementsByTagName('*');
tags = [].slice.call(tags)
// 可以接着遍历了