请教JS高手,IE与netscape兼容问题

themaster 2004-09-16 12:21:57
代码如下:
<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>
<script language=javascript>
var tbl1 = document.getElementById("table1");
var tbd1 = document.getElementById("tbody1");
alert("table1一共有"+tbd1.childNodes.length+"个子节点");
for(i = 0;i<tbd1.childNodes.length;i++){
alert("第"+i+"个节点:"+tbd1.childNodes[i].nodeName);
}
</script>

输出一个表格的行数,使用标准的DOM语法,在IE中显示正常,“table1一共有3个子节点”
但在netscape中,显示却是:,“table1一共有7个子节点”!!
netscape把空格之类也当作了一个节点,遇到这种情况,如何处理?
高分求教!顶者有分!
...全文
243 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
fason 2004-09-17
  • 打赏
  • 举报
回复
tagName 跟 nodeName不是一样

如果这个table是你用dom建立起来的就不会有这些问题
jeuif 2004-09-17
  • 打赏
  • 举报
回复
dw有自动修复netscape和ie不兼容的问题吧
themaster 2004-09-17
  • 打赏
  • 举报
回复
谢谢各位,特别谢谢 robinzsy()
谢谢fason(Forbes Pu) 在51js上的回复,不过你的方法虽然可以解决问题,但并不是我想要的方案
netscape是支持tbody的,即,即使你的table中没有tbody标签,tbody也会出现在table的子节点当中
另外还有一个问题,想听听大家的看法。
如何获得整个document中所有nodeName为"#text",nodeValue=""的所有节点?
我写了一个递归的方法,虽然可以做到,但执行起来速度太慢。
我试了使用document.getElementsByTagName("#text")无法获取
robinzsy 2004-09-17
  • 打赏
  • 举报
回复
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>
BubbleInDiamond 2004-09-17
  • 打赏
  • 举报
回复
谢谢robinzsy() 和themaster(独孤行)提醒,并且唤醒我的烂netscape也听话了,呵……
昨天还不出来,在家时候也写过,也是出不来,家里的版本是window版的7.0,好象bug比较多,回家再试试,如果还是听话,明天再来(不对,要周一才有得上网了)请罪……

不过不知道俩位有没有试过appendChild(tr)应该都是可以用的吧(IE不行),如果还是有不同结果,请千万告知
fason 2004-09-17
  • 打赏
  • 举报
回复
都有代价的,另一个办法是用DOM的解释去模拟XmlDomDocument的selectNodes方法,具体可以去搜索evaluate,createNSResolver这些关键字,我不提示太多了
themaster 2004-09-17
  • 打赏
  • 举报
回复
fason(Forbes Pu) ,你好!
你说的很有道理。
我在作一个很小的WEB框架,客户仅需要写一个配置文件,用我的系统解析自动生成相应的JSP、Servlet文件。目前我重点考虑的是对HTML标签<table>的扩展,使它能够跟具体的数据源关联,实现客户端通过编辑WEB页面上表格中的数据,自动地写回到相应的数据源。因此涉及到对WEB页面上的TABLE的操作。
客户端WEB上最终的源代码是由我的系统生成的,当然我可以控制,使整个HTML文档不包含空白等NETSCAPE解析有问题的字符,但这样,整个HTML文档可读性就不高了,不方便最终用户的使用。
谢谢你的指教
dacom 2004-09-16
  • 打赏
  • 举报
回复
去看看,对你可能有帮助
http://daconglee.home4u.china.com/
fason 2004-09-16
  • 打赏
  • 举报
回复
我不是在51js已经回答了你的问题吗?
要不用nodeType==1判断,要不用getElementsByTagName,再要不就用rows,没其它方法了
emu_ston 2004-09-16
  • 打赏
  • 举报
回复
用rows集合和cells集合呢?
for(i = 0;i<tbd1.rows.length;i++){
BubbleInDiamond 2004-09-16
  • 打赏
  • 举报
回复
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>
张佩 2004-09-16
  • 打赏
  • 举报
回复
up
robinzsy 2004-09-16
  • 打赏
  • 举报
回复
to BubbleInDiamond(以下想法纯属虚构)

netscape支持tbody
robinzsy 2004-09-16
  • 打赏
  • 举报
回复
子节点的类型有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>
BubbleInDiamond 2004-09-16
  • 打赏
  • 举报
回复
用getElementsByTagName吧
BubbleInDiamond 2004-09-16
  • 打赏
  • 举报
回复
netscape不支持tbody,table下一级直接到tr
themaster 2004-09-16
  • 打赏
  • 举报
回复
up也有分哦,呵呵
postfix2 2004-09-16
  • 打赏
  • 举报
回复
不会,我会UP
flyskytoday 2004-09-16
  • 打赏
  • 举报
回复
帮不了你

帮你up:)

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧