netscape不支持tbody,table下一级直接到tr

解决方案 »

  1.   

    子节点的类型有2种,一种是Element node;(nodeType=1)另一种是Text node;(nodeType=3),可以遍历所有子节点,把所有Text node删掉。也可以修改HTML代码,
    把多余空格删掉。
    方法一:
    <script language=javascript>
    var tbl1 = document.getElementById("table1"); 
    var tbd1 = document.getElementById("tbody1");for(i=0;i<tbd1.childNodes.length;)
    {
    var temp=tbd1.childNodes[i];

    if(temp.nodeType==3)
    {
    tbd1.removeChild(temp);
    }
    else
    {
    i++;
    }
    }alert("table1一共有"+tbd1.childNodes.length+"个子节点");
    for(i = 0;i<tbd1.childNodes.length;i++){
        alert("第"+i+"个节点:"+tbd1.childNodes[i].nodeName);
        }
    </script>方法二:
    <table id="table1" border="1" cellspacing="2" width="555">
        <tbody id="tbody1"><tr>
          <td height="16" width="62"><input value="1" type="text"></td>
          <td height="16" width="127"> <input value="monitor" type="text">
          </td>
          <td height="16" width="109"><input value="广东东莞" type="text"></td>
          <td height="16" width="92"> <input value="436" type="text"> </td>
          <td height="16" width="131"> <input value="04/17/1997"
     type="text"> </td>
        </tr><tr>
          <td height="17" width="62"> <input value="2" type="text"> </td>
          <td height="17" width="127"> <input value="printer" type="text">
          </td>
          <td height="17" width="109"><input value="美国加州" type="text"></td>
          <td height="17" width="92"> <input value="18" type="text"> </td>
          <td height="17" width="131"> <input value="02/13/1998"
     type="text"> </td>
        </tr><tr>
          <td height="16" width="62"><input value="3" type="text"></td>
          <td height="16" width="127"> <input value="pc" type="text"> </td>
          <td height="16" width="109"><input value="台湾" type="text"></td>
          <td height="16" width="92"> <input value="143" type="text"> </td>
          <td height="16" width="131"> <input value="01/01/2000"
     type="text"> </td>
        </tr></tbody>
    </table>
      

  2.   

    to  BubbleInDiamond(以下想法纯属虚构)netscape支持tbody
      

  3.   

    to robinzsy:你直接在html中输入当然可以了,问题是dom结构
    试试这个代码
    <body>
    <table id="t"></table>
    <script>
    var tbody = document.createElement("tbody")
    var tr = document.createElement("tr")
    var td = document.createElement("td")
    var text = document.createTextNode("are you sure?")
    td.appendChild(text)
    tr.appendChild(td)
    tbody.appendChild(tr)
    //document.getElementById("t").appendChild(tbody) 这个是IE的方法
    document.getElementById("t").appendChild(tr) //这个是netscape
    </script>
    </body>
      

  4.   

    用rows集合和cells集合呢?
    for(i = 0;i<tbd1.rows.length;i++){
      

  5.   

    我不是在51js已经回答了你的问题吗?
    要不用nodeType==1判断,要不用getElementsByTagName,再要不就用rows,没其它方法了
      

  6.   

    去看看,对你可能有帮助
    http://daconglee.home4u.china.com/
      

  7.   

    to BubbleInDiamond(以下想法纯属虚构)
    我用下面的代码在Mozilla firfox下和IE下测试都是没有问题的。
    mozilla与netscape用的是同样标准,所以netscape应该是支持tbody的。<body>
    <table id="t" border></table>
    <script type="text/javascript">
    var tbody = document.createElement("tbody");
    var tr = document.createElement("tr");
    var td = document.createElement("td");
    var text = document.createTextNode("are you sure?");
    td.appendChild(text);
    tr.appendChild(td);
    tbody.appendChild(tr);
    document.getElementById("t").appendChild(tbody) ;
    </script>
    </body>
      

  8.   

    谢谢各位,特别谢谢 robinzsy() 
    谢谢fason(Forbes Pu) 在51js上的回复,不过你的方法虽然可以解决问题,但并不是我想要的方案
    netscape是支持tbody的,即,即使你的table中没有tbody标签,tbody也会出现在table的子节点当中
    另外还有一个问题,想听听大家的看法。
    如何获得整个document中所有nodeName为"#text",nodeValue=""的所有节点?
    我写了一个递归的方法,虽然可以做到,但执行起来速度太慢。
    我试了使用document.getElementsByTagName("#text")无法获取
      

  9.   

    dw有自动修复netscape和ie不兼容的问题吧
      

  10.   

    tagName 跟 nodeName不是一样如果这个table是你用dom建立起来的就不会有这些问题
      

  11.   

    fason(Forbes Pu) ,你好!
    你说的很有道理。
    我在作一个很小的WEB框架,客户仅需要写一个配置文件,用我的系统解析自动生成相应的JSP、Servlet文件。目前我重点考虑的是对HTML标签<table>的扩展,使它能够跟具体的数据源关联,实现客户端通过编辑WEB页面上表格中的数据,自动地写回到相应的数据源。因此涉及到对WEB页面上的TABLE的操作。
    客户端WEB上最终的源代码是由我的系统生成的,当然我可以控制,使整个HTML文档不包含空白等NETSCAPE解析有问题的字符,但这样,整个HTML文档可读性就不高了,不方便最终用户的使用。
    谢谢你的指教
      

  12.   

    都有代价的,另一个办法是用DOM的解释去模拟XmlDomDocument的selectNodes方法,具体可以去搜索evaluate,createNSResolver这些关键字,我不提示太多了
      

  13.   

    谢谢robinzsy() 和themaster(独孤行)提醒,并且唤醒我的烂netscape也听话了,呵……
    昨天还不出来,在家时候也写过,也是出不来,家里的版本是window版的7.0,好象bug比较多,回家再试试,如果还是听话,明天再来(不对,要周一才有得上网了)请罪……不过不知道俩位有没有试过appendChild(tr)应该都是可以用的吧(IE不行),如果还是有不同结果,请千万告知