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はテキストノードも返します。これはおそらくあなたの混乱の原因です。

すべてのchildNodeを反復処理しますが、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 に答える