<html>
     <head>
         <title> Untitled Document </title>
 <script type ="text/javascript">
// 同样的两次调用document.write(),为什么一会发生错误,一个不会?
function learn_write_wrong(){
var pre = document.getElementsByTagName("pre");
document.write(pre[0].innerHTML, "<br />");
document.write(pre[0].id, "<br />"); // 这句话发生了错误! why?
} function learn_write_right(){
document.write("right", "<br />");
document.write("right yeah!", "<br />");
}
</script>
     </head>
     
     <body>
       <pre id = "实验document.write()方法">
网页原内容
   </pre>
   <input type = "button" value = "错误" onclick = "javascript: learn_write_wrong();" />
   <input type = "button" value = "正确" onclick = "javascript: learn_write_right();" />
     </body>
</html> 代码和问题都在里面了!望csdn的大虾们指点迷津啊!!!!!!!

解决方案 »

  1.   

    这个涉及到html文档流的概念,算是JS初学者最常问的问题之一了。仔细看下这篇文章:
    http://w3help.org/zh-cn/causes/BW1010
      

  2.   

    文档加载完成就不要用document.write了
      

  3.   

    谢谢2楼的文档!我看了!又长了点知识!呵呵!
    不过还是不懂啊!!!貌似document.write()能否写入历史记录与我问题无关啊!!要不就是文档我没看懂?
    另外!谢谢3楼的建议!补充:我试了下!在IE,fireFox中都会后引发相同的错误,而在opera中就可正确运行!
          另外,如果把引发错误的语句document.write(pre[0].id, "<br />");改为其他写入语句
          document.write();就不会有错!!
          
      

  4.   

    你把document.write(pre[0].innerHTML, "<br />");注释掉document.write(pre[0].id, "<br />"); 就可以正常运行了   原因可能是这样的   因为是页面已经加载完毕了 当你点错误按钮后 先运行document.write(pre[0].innerHTML, "<br />");,此时整个页面都已被document.write(pre[0].innerHTML, "<br />");,覆盖掉了 也就是说此时的pre[0]已经不存在了 所以没法输出pre[0].id  但如果这样的话应该会报错才对  貌似没有呢   不是很清楚了   帮你顶下吧
      

  5.   

    你把两句话调换位置看看会出现什么情况
    document.write(pre[0].innerHTML, "<br />");
    document.write(pre[0].id, "<br />");
      

  6.   

    document.write会先把页面上原有的东西清空
      

  7.   

    试过了!哪一个句话写在后面就都报错!
    其实我是想知道document.write具体是怎么运行的?
    我觉得5楼的讲是对的:第一次写的时候可获取原文档到p,但是第二次写的时候,p已经被擦除了估计!所以访问不到p值!我试了下,不光用document.write会报错!只要试图读取p,IE就会报"无权限错误!"
      

  8.   

    http://hi.baidu.com/lmcbbat/blog/item/5d40c473fb3a19138601b0c8.html你参考这个看看
      

  9.   

    10楼的文档
    "任何一个对当前页面进行操作的document.write()方法将打开—个新的输出流,它将清除当前页面内容(包括源文档的任何变量或值)。"
    我觉得就是这句话了呵呵!
      

  10.   

    document.write(pre[0].innerHTML, "<br />",pre[0].id, "<br />");
    似乎改成这样,就能显示出LZ想要的那个结果。
      

  11.   

    document.write(pre[0].innerHTML+"<br />"+pre[0].id);