当我想要获得第一个孩子时,为什么我需要将索引1添加到我的childNodes数组?

时间:2012-07-09 20:14:05

标签: javascript dom

我在javascript中有一个函数,它应该输入输入到输入字段的文本。 我的代码:

<head>
    <script type="text/javascript">
    function calculate()
    {
        var input = document.body.childNodes[1];
        document.write(input.value);
    }
    </script>
</head>

<body>
    <input type="text"/>
    <input type="button" onclick="calculate()"/>
</body>

现在我不明白为什么我必须将索引“1”放入我的childNodes数组中?逻辑上它应该是“0”,因为<input type="text"/>是身体的第一个孩子。

2 个答案:

答案 0 :(得分:1)

DOM规范要求HTML中的节点之间的空格应该在childNodes列表中作为文本节点预先发布。所以使用HTML

<div id="parent"><div>child 1</div> abc <div>child2</div></div>  </div>

我们希望父div的子节点是

  1. 第一个孩子div
  2. 两个子div之间的文本节点,包含文本“abc”
  3. 第二个孩子div
  4. 第二个子div之后的空白文本节点,包含“”
  5. 如果您只想获取元素节点而不是文本节点,请在循环时检查子节点的nodeType属性(元素为1,文本节点为3,IIRC)或使用“children”数组“childNodes”。

    请注意,较旧的浏览器可能无法实现子数组,并且迭代通过childNodes时Internet Explorer可能不会显示空白节点。

答案 1 :(得分:0)

不,第一个孩子在某些只有空白区域的浏览器中是文本节点。但您可以使用Element.firstElementChild