今天完成的事情:
- 昨天写的页面在点击了前序排序之后页面会崩溃掉, 排查了showNode函数和别的函数的问题, 最后发现问题出现在129行里面
function preOrder(root) {
if (root) {
showNode(root);
for (var i=0;i<root.children.length;i++) { //这个地方没有写var一开始, 导致了每次循环都会使用同样的i。导致了最后错误的发生
preOrder(root.children[i])
}
// preOrder(root.children[0]);
// preOrder(root.children[1]);
} else {
throw "The" + root + "element didn't find."
}
}
任务八参考链接:
http://smallstarz.com/baidutask-2017/binbinxueyuan/task8/task_1_8_1.html
明天计划的事情:
- 重看一下javascript高级程序设计和相关资料,争取解决一下闭包的难点。
- 完善一下task8的搜索功能
遇到的问题:
-
后序排序的第一个元素没有从最外层的元素开始, 而是从倒数第二层的最左边的元素开始了, 此时的结构大概为
此时起点没有从level4开始却从level3开始让我有点困惑。
我看了一下参考链接,里面也是和我的一样,优先跑level3的而不是level4的,难道说这个就是后序排序的运行模式吗,还是我们写的都不对呢。
- innerHTML里面包括了子元素div里面的内容, 不想要他,怎么办呢
- 又遇到闭包问题了... 还要回去再看一遍书,还没有理清楚
收获:
如何单独获得一个元素的文本而不包含其下面的其他元素
参考地址: http://www.cnblogs.com/wbkt2t/archive/2009/12/06/1618222.html
//兼容浏览器获取节点文本的方法
function text(e)
{
var t="";
//如果传入的是元素,则继续遍历其子元素
//否则假定它是一个数组
e=e.childNodes||e;
//遍历所有子节点
for(var j=0;j<e.length;j++){
//如果不是元素,追加其文本值
//否则,递归遍历所有元素的子节点
t+=e[j].nodeType!=1?
e[j].nodeValue:text(e[j].childNodes);
}
//返回区配的文本
return t;
}