为什么用alert输出正常,全部换成document.write错误;只用一个document.write值也正常,两个就错误呢?

来源:9-3 getElementsByTagName()方法

qq_牛牛_12

2016-03-24 16:21

<!DOCTYPE HTML>

<html>  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  

<title>JavaScript</title>  


<script type="text/javascript">

 /*

 function getValue()

          {

              var myH=document.getElementById("myHead");

              alert(myH.innerHTML)

          }

          function getElements()

          {

             var myS=document.getElementsByName("sex");

              alert(myS.length);

          }


          function getTagElements()

          {

              var myI=document.getElementsByTagName("td");

              alert(myI.length);

          }

 */

function getTagElements(){

    var mynodes=document.getElementsByTagName("tr");

    

    alert(mynodes.length);

 //  document.writeln(mynodes.length);

  

    var tab=mynodes[0].hasChildNodes();

    alert(tab);

// document.writeln(tab);


    var lg=mynodes[0].childNodes;

    alert(lg.length);

 //  document.writeln(lg.length);

   

}     

 

     </script>      

</head>  

<body>  

    

        <form name="Input">

            <table align="center" width="500px" height="50%" border="1">

                <tr>

                    <td align="center" width="100px">

                        学号:

                    </td>

                    <td align="center" width="300px">

                        <input type="text" id=userid name="user" onblur="validate();">

                        <div id=usermsg></div>

                    </td>

                </tr>

                <tr>

                    <td align="center" width="100px">

                        姓名:

                    </td>

                        <td align="center">

                        <input type="text" name="name">

                    </td>

                </tr>

                <tr>

                    <td align="center" width="%45">

                        性别:

                    </td>

                    <td align="center">

                        <input type="radio" name="sex" value="男">

                        男

                        <input type="radio" name="sex" value="女">

                        女

                    </td>

                </tr>

                <tr>

                    <td align="center" width="30%">

                        年龄:

                    </td>

                    <td align="center" width="300px">

                        <input type="text" name="age">

                    </td>

                </tr>

                <tr>

                    <td align="center" width="100px">

                        地址:

                    </td>

                    <td align="center" width="300px">

                        <input type="text" name="addr">

                    </td>

                </tr>


            </table>

        </form>

       

       

        <input type="button" onclick="getTagElements()"

            value="看看标签名为tr的节点有几个?" />

            

       


    </body>

</html>


写回答 关注

2回答

  • 榎目贵音
    2016-03-31 18:39:52
    已采纳

    哈哈, 我知道这个,刚刚我就发现这个问题了,找了半天终于找到是什么原因了:

    首先,你输出document后,会覆盖<body>里面的所有内容,所以input的这个元素就没有了,自然就没法查看有多少个节点了。为什么第一个document能输出出来呢,因为输出第一个后他就覆盖了<body>里面的元素,这个时候<body>里面就只有doument输出出来的数字,第二个第三个document找不到input这些标签,所以只有第一个是正常的。

    qq_牛牛_...

    非常感谢!

    2016-03-31 21:04:46

    共 1 条回复 >

  • 紫皇夜雨
    2016-03-24 19:17:23

    我不明白你所说的错误是什么,我觉得可能你觉得,这个东西跑完之后不会像你的alert一样在当前窗口输出结果。我们通常按照两种的方式使用 write() 方法:一是在使用该方在文档中输出 HTML,另一种是在调用该方法的的窗口之外的窗口、框架中产生新文档。在第二种情况中,请务必使用 close() 方法来关闭文档。

    而我觉得你现在觉得的所谓的错误可能就是你并没有注意到你已经用到了document.write的第二种方法,因为JavaScript在跑的过程当中不会涉及到html当中的对象,我们的浏览器只是因为有了相应的JavaScript的解释器,所以当我们在界面当中写入JavaScript之后,是我们浏览器默认的采用自己的JavaScript解释器来解释了相关语句,进而进一步来确定浏览器自身该在哪里进行相应的修饰。

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468061 学习 · 21891 问题

查看课程

相似问题