问题似乎很简单,但请看一下下面的代码
<html>
<head>
    <title></title>
    <script language="javascript" type="text/javascript">
        var div=document.createElement("div");
        div.innerHTML="被添加的div";
        //如果直接document.body.appendChild(div); 则失败.
        
        //document.write("<span></span>");  //添加这行,document.body.appendChild(div) 成功.
        //document.write("&nbsp;");         //document.body.appendChild(div); IE下成功,FF,Chrome失败.
        //document.write(" ");              //document.body.appendChild(div); 失败.
        
        document.body.appendChild(div);
    </script>
</head>
<body></body>
</html>
谁告诉我其中原因?

解决方案 »

  1.   

    修正一下:
    //document.write("<span></span>");  //添加这行 IE失败, FF,chrome成功.
    //document.write("可显示的文字内容");  // IE,FF,Chrome 都成功
      

  2.   


    楼主试试
    <script language="javascript" type="text/javascript">
            var div=document.createElement("div");
            div.innerHTML="被添加的div";
            //如果直接document.body.appendChild(div); 则失败.
            
            //document.write("<span></span>");  //添加这行,document.body.appendChild(div) 成功.
            //document.write("&nbsp;");         //document.body.appendChild(div); IE下成功,FF,Chrome失败.
            //document.write(" ");              //document.body.appendChild(div); 失败.
            
            document.body.appendChild(div);
        </script>
    放到body下面看看?
      

  3.   

    你放在上面。。document都还加载完。。怎么能调用呢
      

  4.   

    我知道把script放在body下会成功
    但我提这个问题的目的在于想知道document.write做了什么动作,从而对document.body产生影响
      

  5.   

    document.write
      指的是当前文档对象输出  上面代码的意思是:创建一个"div"元素节点
           div.innerHTML="被添加的div"是指给"div"添加文本内容document.body.appendChild(div)指的是给body添加子元素"div"
      

  6.   

    这些代码所代表的意思我知道
    我现在想知道的是 document.write的存在,会影响document.body.appendChild成功的原因
      

  7.   


    我比较好奇的是,放在body前面,第一句话都报错了,怎么会执行下去?
      

  8.   

    document.write("可显示的文字内容"); 
    document.body.appendChild(div);
    如果代码是这样的话,执行是成功的,你可以去试一下
      

  9.   

    我理解是这样
    document是引擎开始解析代码前就初始化,放到作用域,推到作用域链的末端,不过这时作用域链是空的,所以document是处于顶端,也就是我们所说的全局变量
    初始化工作类似 var document = new Document();
    而Document是拥有body,getElementById,getElementsByName,write等方法的类
    所以document就拥有了Document的原型方法与其成员变量,但getElementById这些是基于body已经加载完成才能使用,这就是为什么当页面没加载完成时,我们使用不了getElementById的原因,而write并不需要,所以我们可以在页面还没加载完之前调用document.write方法
    并且我们也知道write方法作用是楼上说的“指的是当前文档对象输出”,
    其实调用document.write方法的同时,会调用open与close的方法,具体会这么实现
    document.open();
    document.write();
    document.close();
    当open的时候将会打开一个文档流来输入内容,当文档已存在的时候,则先清空
    write就是写入内容,close就是关闭文档流了
    而上面的例子,当第一次使用document.write的时候,文档还没存在,所以它不会清空,而会将内容是直接附加到文档流中,当有内容附加在文档流后,body自然就会创建了,大家可以用firebug断点就清晰看到第一次document.write之前body为null,当document.write之后,body就为“body”了,所以就解析了楼主为什么document.write之后能使用document.body.appendChild
    但同时提醒大家,非必要情况请不要使用document.write,因为当window.onload的时候,会将文档清空的
      

  10.   


    Good!!
     我以前从没有这么深入了解,只知道可以这么用.今天看了你的回帖,才知道怎么回事.
     不错大有收获吖
      

  11.   

    学习了。谢谢liangws。关于document.write这个http://www.w3cool.com/2008/08/14/documentwrite.html也写得不错~