博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

bridge2006

天行健,君子以自强不息。
  bridge2006.cublog.cn

关于作者
姓名:bridge
职业:IT
年龄:28
位置:湖北
个性介绍:天行人健,君子以自强不息.
|| << >> ||
我的分类


在ie及firefox下DOM使用问题!
 
近几日看了一下《AJAX开发简略》,sample在ie下运行都没什么问题,但是一到firefox下面就得不到正确的结果,不知是怎么回事,在网上找了许多,也没搞清是怎么回事,也不知道所以然,于是今天下了一下firefox2.0,装了一个firebug扩展,运行sample,终于问题发现了,原来,我们一般为了美观,html文档书写得感觉明朗结构化才爽,结果正是这一问题,导致了firefox下操作dom有总题,平常我们写都是在一个标记完了后会加上回车符,但是在firefox里面,dom会将回车符当成一个node类型为3,即Text来对待,但是在ie里面,dom会把回车符忽略不计在内,所以在ie下与firefox下操作dom时,同样的语句可能得到的结果不同。
如下举例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script language="javascript">
  function replacecontent() {
    var table1 = document.getElementsByTagName("table")[0];
 var table2 = document.getElementsByTagName("table")[1];
 var kid1 = table1.firstChild.firstChild.firstChild; //定位到<td>节点
 var kid2 = table2.firstChild.firstChild.firstChild; //定位到<td>节点
 var repkid = kid2.firstChild; //定位到表格二<td>内含的TextNode节点
 //alert(kid1.tagName);
 try {
     kid1.replaceChild(repkid,kid1.firstChild);
  //kid2.replaceChild(kid1.firstChild,kid2.firstChild);
 }catch(e) {
   alert(e);
 }
 
  }//end function
</script>
</head>
<body>
<table width="200" border="1" cellpadding="0" cellspacing="0">
 <tbody>
  <tr>
   <td>表格一</td>
  </tr>
 </tbody>
</table>
<br/>
<table width="200" border="1" cellpadding="0" cellspacing="0">
 <tbody>
  <tr>
   <td>表格二</td>
  </tr>
 </tbody>
</table>
<br/>
<input type="button" name="replace" value="替换"  onclick="replacecontent()"  />
</body>
</html>
 

如果大家把这段代码存贮后在ie中运行,不会提示有错误,得到预期的结果,但是要在firefox中运行,你按替换按钮怎么按都没用,为什么呢?
我们打开fireBug,定位到第一个table元素,再看一下inspector的DOM标签,你会看到如下的结果:
 
 
 
 
 
大家看到了吗,当前TABLE结点的ChildNodes为3,第一个是"[Text]\n    ",第二个才是"<tbody>",下面的firstChild也是"[Text]\n  "同,第一个结点为什么不是<tbody>呢,我们再将html代码在DW中打开,显示隐藏符号,会发现每一行中多了一个回车符, 这不正是"\n"吗!
 
 
原来firefox将回车符解释成了一个Text类型的结果,问题找到了,办法自然就有了,要么改变dom的写法控制,要么将html文档重新整理一下,去掉回车符中,我们去掉回车符再看看firebug的结果看一下:
 
 
 
怎么样,正是我们想要的吧!因此在使用dom时请注意不同浏览器下的问题。OK,就写到这里,给像俺这样的菜鸟一点帮助。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

发表于: 2006-11-20,修改于: 2006-11-20 13:51,已浏览476次,有评论2条 推荐 投诉


网友评论
网友: leapder 时间:2007-05-15 16:42:13 IP地址:211.94.134.★
呵呵,谢谢啊!我也遇到了这个问题!多亏你的这个文章

网友: sam 时间:2007-09-20 18:06:17 IP地址:60.247.0.★
不错,发现问题并能解决问题

 发表评论