1

我想知道该.childNodes属性,我有下面的代码,出于某种原因,我得到了 18 个孩子,而 6 个是HTMLInputElement预期的,其余的是undefined. 这是关于什么的?有没有一种有效的方法来迭代input元素?

<html>
  <head>
    <script>
    window.onload = function(e){
        form = document.getElementById('myForm');
        alert(form.childNodes.length);
        for(i=0; i<form.childNodes.length; i++){
            alert(form[i]);
        }
    }
    </script>
  </head>
  <body>
<form id='myForm' action="haha" method="post">
Name: <input type="text" id="fnameAdd" name="name" /><br />
Phone1: <input type="text" id="phone1Add" name="phone1" /><br />
Phone2: <input type="text" id="phone2Add" name="phone2" /><br />
E-Mail: <input type="text" id="emailAdd" name="email" /><br />
Address: <input type="text" id="addressAdd" name="address" /><br />
<input type="submit" value="Save" />
</body>
</html>
4

4 回答 4

3

文本节点,即使它们仅包含空格,也将包含在输出中,br元素也是如此。

如果.children您想要所有元素(包括br. 这只会给你元素节点。我认为较旧的 IE 错误地包含注释节点,但您的代码中没有,所以没有问题。

或者你可以做...

form.getElementsByTagName('input')

...假设您只想要input元素。

除此之外:你忘了关闭你的form元素。

于 2012-04-10T23:20:12.860 回答
1

childNodes 也返回文本节点;这可能是您困惑的根源。

要遍历所有子节点,但只关注 INPUT,只需检查节点的 tagName 属性。如果节点是文本节点,它不会有 tagName,如果节点有 tagName,你可以检查 tagName == "input"。

于 2012-04-10T23:19:00.047 回答
1

用于form.elements获取所有表单字段,或form.getElementsByTagName('INPUT')获取INPUT表单内的元素。

于 2012-04-10T23:24:58.830 回答
0

form.elements 是访问表单中每个元素的快捷方式——

window.onload = function(e){
        var s='', form = document.getElementById('myForm'),
        L=form.elements.length;
        s=L+'\n';
        for(var i=0;i<L; i++){
            s+= (form[i].name || form[i].id)+'='+form[i].value+'\n';
        }
        alert(s);
    }
于 2012-04-10T23:23:50.620 回答