for循环中的document.write

时间:2014-03-09 15:00:49

标签: javascript dom

我有以下HTML文档

<html>
<script>
        function explode() {
                pp = document.getElementsByTagName("a");
                for(i=0;i<pp.length;i++) {
                    document.write(pp[i].href);
                }
        }
</script>

<body>
 <a href="http://google.com">Google</a>
 <a href="http://yahoo.com">Yahoo</a>
 <button onclick="explode()">Explode</button>
<body>

</html>

执行时我希望我的窗口上打印所有超链接,但我只得到第一个。有人可以解释一下

更新 我确信document.write将重置页面内容的答案,但如果是这样,那么我已经是变量pp中的对象列表,并且在for循环结束时我应该获取最后一个元素,为什么是第一个元素?

3 个答案:

答案 0 :(得分:2)

document.write - 当他遇到document.write时,会第一次清除您的浏览器!

您必须汇总这些值。

这样做

  function explode() {
            pp = document.getElementsByTagName("a");
            var a='';
            for(i=0;i<pp.length;i++) {
              a+=pp[i].href
            }
       document.write(a);
    }

http://jsbin.com/buzexuce/2/edit

为了说明另一个方向:

look what happens here : 

 <a href="http://google.com">Google</a>
 <a href="http://yahoo.com">Yahoo</a>
 <button onclick="explode()">Explode</button>

  <script>
    var  pp = document.getElementsByTagName("a");
                for(i=0;i<pp.length;i++) 
                { document.write(i);}
    </script>

enter image description here

(在dom准备好之前 - 一切都很好,如预期的那样)。

答案 1 :(得分:2)

如果在文档完全加载后开始写入文档,您将隐式打开一个新文档并替换当前文档。您可以使用document.write在文档加载时添加到文档中(例如,在代码中内嵌的脚本标记中),但是一旦文档完成,使用document.write将隐式调用document.open创建一个要写入的新文档。

您从getElementByTagName method获得的元素列表会返回一个实时列表,该列表会在向DOM添加元素或从DOM中删除元素时更新。当您将第一个项目写入文档时,列表为空,因为文档中不再存在任何匹配元素。

答案 2 :(得分:0)

应该是:

document.write(pp[i].href);