0

我在 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"/>它是 body 的第一个孩子。

4

2 回答 2

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 之后的空白文本节点,包含“”

如果您只想获取元素节点而不是文本节点,请在循环时检查子节点的 nodeType 属性(元素为 1,文本节点为 3,IIRC)或使用“children”数组而不是“childNodes” ”。

请注意,较旧的浏览器可能不会实现 children 数组,并且 Internet Explorer 在迭代 childNode 时可能不会显示空白节点。

于 2012-07-09T20:25:42.170 回答
0

不,在某些浏览器中,第一个子节点是文本节点,只有空格。但是你可以使用Element.firstElementChild

于 2012-07-09T20:17:28.383 回答