用javascript生成DOM树.(表格手动增加)

这是我第一次在CSDN上写关于技术方面的东东,拿来献献丑.

最近在做动态菜单菜单的管理,功能要求:每一个主菜单下面可以有多个子菜单,所有的菜单信息都已录入数据库.现在需要将数据从DB中提出,实现动态分组,四处搜索找到的资料总是和自己的实际的情况不符,用javascript创建DOM树.可以实现对DOM的树的任意结点进行操作,

/
  ///动态增加行
  function addRow(){
  //alert("222222")
  var table=document.getElementById("sublist")
  var tbody=document.createElement("tbody")
   var tr=document.createElement("tr");// 创建行对象
       for(var i=0;i<4;i++){
       if(i==0){ //设置第一个单元格中的checkbox
       var td=document.createElement("td");
       var input=document.createElement("input");//创建input元素对象
      // var attr=document.createAttribute("type");//创建一个type属性对象
     // var name=document.createAttribute("name");//创建name属性
       // 设置input属性
      // input.setAttribute("type","checkbox");
       //input.setAttribute("name","checkbox");
       //input.setAttribute("value","checkbox");
       // input.setAttribute(attr);
       // input.setAttribute(name);
       //input.type="checkbox";
    input.setAttribute("type","checkbox");
    input.setAttribute("name","checkbox");
    input.setAttribute("value","checkbox");
       //input.name="checkbox";
       //input.nodeValue="checkbox";
       td.appendChild(input);
       tr.appendChild(td);
    
       }
       else if(i==3){ //设置最后列一个单元格
        var td=document.createElement("td");
       //var attr=document.createAttribute("type");
      // var name=document.createAttribute("name");
       var value=document.forms(0).elements("pgproupNo").value //取菜单组号
       var txtValue=document.createTextNode(value);// 创建文本结点 
     
       td.appendChild(txtValue);
       tr.appendChild(td);
      
       }
       else if(i==2){//菜单列表信息提取
       var td=document.createElement("td");
       var select=document.createElement("select");
       select.setAttribute("name","submenuNm");
       //var attr=document.createAttribute("type");
      // var name=document.createAttribute("name");
       //input.type="text";
       //input.name="submenuId";
       //input.value=""
       //alert("00000");
       <%
       ArrayList subList = (ArrayList)(request.getSession().getAttribute("subList"));
       Iterator iterator=(Iterator)subList.iterator();
       while(iterator.hasNext()){
        SubProgram subpg = (SubProgram)iterator.next();
       
     
      
       %>
  
    var option = document.createElement("option");
    option.setAttribute("value","<%=subpg.getProgramCd()%>");
    var textNode = document.createTextNode("<%=subpg.getProgramName()%>");
    option.appendChild(textNode);
    select.appendChild(option);
    <%
    }
    %>
    //select.setAttribute("onchange","valueChange();");
     
       td.appendChild(select);
       tr.appendChild(td);
       }else{
       {
       var td=document.createElement("td");
       var input=document.createElement("input");
       //var attr=document.createAttribute("type");
      // var name=document.createAttribute("name");
       //input.type="text";
       //input.name="submenuId";
       //input.value=""
    input.setAttribute("type","text");
    input.setAttribute("name","submenuId");
    input.setAttribute("value","");
    input.setAttribute("onchange","valueChange();");
     
       td.appendChild(input);
       tr.appendChild(td);
       }
       }
      
      
       }
      // alert("00000");
     table.appendChild(tbody);
        tbody.appendChild(tr);
    //table.appendChild(tr);
        
  }
  ///
  /删除最后一行方法
  function deleteRow(){
 var table=document.getElementById("sublist");
 var tbody=table.getElementsByTagName("tbody").item(table.getElementsByTagName("tbody").length-1) ;
 var nodetr=tbody.firstChild ;
 var lasttr=tbody.removeChild(nodetr);
 
 
  }
  //
 / 对方法创建树形结构的理解:全部元素都是table的子元素或子孙元素,原来已有的tr和新建的tbody元素形成兄弟结点关系
  function getTableList(){
  var tab=document.getElementById("sublist");//获取提表格引用
  var tbodylist=tab.childNodes;//获取对象集合(其中原已存在的tr和新建的tbody并列)
  //var trlist=tab.getElementByTagName("tr");//获取行对象集合
  //alert(trlist.length);
  //alert(tbodylist.length);
  for(var i=1;i<tbodylist.length;i++){  //只取table下抽的tbody元素,因此从1开发遍历
   var trnode=tbodylist.item(i).childNodes.item(0);//每一个tbody只有一个tr孩子元素,因而用item(0)
   //alert(trlist.length);
   //alert(trlist.length);
   var tdlist=trnode.childNodes;//取得tr下面的所有孩子结点td,返回一个tdlist
   //alert(tdlist.length);
    for(var j=1;j<tdlist.length-1;j++){ //略去每一行中的第一列和最后一列,因而从1开始遍历,到length-1结束
      var tdcell=tdlist.item(j);
   var inputNode=tdcell.childNodes.item(0);//取得input元素
   //var valuetr=txt.getAttribute("value");// 取得input元素的value属性值
  //document.getElementById("1")appendChild("1111111111111111");//
  //inputNode.value=j;
  alert(inputNode.getAttribute("value"));
     
    }
   }
 
  }

 

页面代码:

html:

 <table width="1014" border="1">
      <tr>
        <td width="158">菜单组号(*)</td>
        <td width="468"><label>
        <html:text property="pgproupNo"/>
        </label></td>
        <td width="366" rowspan="2">
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <label>
          <input type="button" name="read" value="读取" style="width:120px;height:40px" id="read" οnclick="queryCommit();" />
        </label>
        </td>
      </tr>
      <tr>
        <td>主菜单名</td>
        <td><label>
       <html:text property="mainpgName"/>
        </label></td>
       
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <label>
          <input type="button" name="button" value="行增加" id="addrow" " οnclick="addRow();" />
        </label>
          <label>
          <input type="button" name="button" value="行删除" id="deleterow"  οnclick="deleteRow();" />
          </label></td>
      </tr>
    </table>

创建的DOM树如下

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值