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

我写的代码为嘛不停地报TypeError: arr[j] is null?还有汽车前面那个符号也不变化?请大神帮忙看看嘛

我写的代码为嘛不停地报TypeError: arr[j] is null?还有汽车前面那个符号也不变化?请大神帮忙看看嘛

需要实现的任务:                1、点击元素的增添按钮时候,在该节点下增添节点(                     可与页面初始化时候的增添函数合并;封装函数;                   )                   若无子节点,标题前面显示为空;                2、删除节点,当点击删除按钮时候,删除该按钮的父元素                3、                   点击元素节点的时候,判断节点下边是否还有节点                   如果有,合拢,并将该节点的显示成合拢状态                   如果节点的下边无节点,将其打开,节点显示成打开状态                4、查询节点,通过循环树节点,与输入值进行匹配,相同则将                   其背景色显示为红色,如果找到的节点处于被父节点折叠隐藏的状态,则需要做对应的展开<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta charset="utf-8"><title>无标题文档</title><style>body{     display:flex;     align-item:center;     justify-content:center;     background:#096;     font-size:15px;     font-style:"微软雅黑";     color:#000;     font-weight:bold;          }#tree{         width:400px;         height:400px;         border:1px solid #eee;         background-color:#fff;         margin-top:100px;          position:relative;         padding:20px 20px;         }#node{        height:350px;        width:350px;        margin:10px 10px 10px 10px;       }.nodeShow{       width:200px;       line-height:20px;       margin:10px 15px;        }.nodeHide{       display:none;        }#footer{        position:absolute;        background:#066; width:400px; height:50px;        bottom:0px;        left:0px;        }#form{      position:absolute;      top:15px;      right:10px;           }.display{        border:2px solid #000;        display:inline-block;        text-decoration:none;        width:10px;        height:10px;        color:#000;         text-align:center;         vertical-align:top;        line-height:8px;        padding:1px 1px 1px 1px;      }.add,.del{        margin-left:6px;        display:none;          vertical-align:top;      }.nodeHead span{     cursor:pointer;     margin-left:3px;    }.nodeHead:hover >.add,.nodeHead:hover >.del{     display:inline;     cursor:pointer;         }</style></head><body><div id="tree">   <div class="nodeShow" id="node">   <span class="nodeHead" id="car">   <span class="txt">     <a class="display" href="javascript:;">+</a>       汽车     </span>      <img class="add" src="images/01.png">    </span>  </div>           <div id=footer>     <div id="form">     <input type="text" id="txt"/>     <input type="button" id="btn1" value="查找结点"/>     </div>      </div></div><script type="text/javascript" src="js/tree.js"></script></body></html>JavaScript代码//增加子元素function addChild(parent,text){       var img1=document.createElement("img");        var img2=document.createElement("img");        img1.setAttribute("src","images/01.png");       img2.setAttribute("src","images/02.png");       img1.setAttribute("class","add");       img2.setAttribute("class","del");       var display=document.createElement("a");       display.setAttribute("href","javascript:;");       display.setAttribute("class","display");         var word1=document.createTextNode("+");       display.appendChild(word1);              var ospan=document.createElement("span");       var text=document.createTextNode(text);       ospan.setAttribute("class","txt");        ospan.appendChild(display);       ospan.appendChild(text);          var nodeHead=document.createElement("span");       nodeHead.setAttribute("class","nodeHead");       nodeHead.appendChild(ospan);       nodeHead.appendChild(img1);       nodeHead.appendChild(img2);        var nodeShow=document.createElement("div");       nodeShow.setAttribute("class","nodeShow")       nodeShow.appendChild(nodeHead);       parent.appendChild(nodeShow);  }//树的初始化var node=document.getElementById("node");var txtArr=document.getElementsByClassName("txt");var nodeShowArr=document.getElementsByClassName("nodeShow");addChild(node,"英国品牌");addChild(nodeShowArr[1],"路虎");addChild(nodeShowArr[1],"捷豹");addChild(node,"德国品牌");addChild(nodeShowArr[4],"宝马");addChild(nodeShowArr[4],"奔驰");addChild(nodeShowArr[4],"奥迪");addChild(node,"美国品牌");addChild(nodeShowArr[8],"福特");addChild(nodeShowArr[8],"林肯");//遍历数组function nextsiblings(nodeElement){     if(nodeElement){       arr.push(nodeElement.nextSibling);       nextsiblings(nodeElement.nextSibling);   }}for(var i=0;i<txtArr.length;i++){   txtArr[i].onclick=function(){     arr=[];     var self=this;     nextsiblings(this.parentNode);     if(arr.length>1&&foldNode(this.parentNode.parentNode)==true){       for(var j=0;j<arr.length;j++){         if(arr[j].className=="nodeShow"){         arr[j].style.display="none";         console.log(arr[j]);         self.firstChild.innerHTML="-";     }     }   }  }  }//判断节点是否收拢function foldNode(nodeElement){    if(nodeElement.childNodes.length>1){     return true;  }}var arr=[];var data=[];traverseDF(node,data);////js多叉树深度优先遍历function traverseDF(node,nodeList){     if(node){          nodeList.push(node);          for(var i=0,len=node.children.length;i<len;i++){             if(node.children[i].className=="nodeShow"){             traverseDF(node.children[i],nodeList);       }     }      } }//添加浏览器兼容事件function addEvent(el,type,handler){  if(el.addEventListener){      el.addEventListener(type,handler,false);     }else if(el.attachEvent){      el.attachEvent("on"+type,handler);     }else{        el["on"+type]=handler;  } }
查看完整描述

1 回答

?
杰杰就是我

TA贡献32条经验 获得超24个赞

我看了一下 你的代码  首先你往 arr里面存入数据,  可以得到长度, 但是你得到的长度始终比你 子节点的长度 大1 ,  所以导致 出错 ,因为最后一个为null, 请思考一下问题的所在

查看完整回答
反对 回复 2016-12-22
  • 我背后有个胖子
    我背后有个胖子
    你好,出现null的,我已经在递归函数function nextsiblings(nodeElement){ if(nodeElement){ arr.push(nodeElement.nextSibling); nextsiblings(nodeElement.nextSibling); } } 中将判断条件改为if(nodeElement.nextSibling),解决了null的问题,但是我用console.log弹出当前点击,当我点击汽车的时候,弹出的arr显示了<TextNode textContent="\n ">这一个东东,导致我点击汽车时无法叠拢,且汽车前面的标签未变化,这是为嘛,我已经查看了HTML结够,木有问题哒,麻烦大神啦
  • 1 回答
  • 0 关注
  • 1327 浏览
慕课专栏
更多

添加回答

举报

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