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配列に入れなければならないのかということです。<input type="text"/>は体の最初の子であるため、論理的には「0」である必要があります。

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. テキスト「 abc 」を含む、2 つの子 div 間のテキスト ノード
  3. 2 番目の子 div
  4. " " を含む、2 番目の子 div の後の空白テキスト ノード

テキスト ノードではなく要素ノードのみを取得する場合は、ループを通過するときに子ノードの nodeType プロパティを確認するか (要素の場合は 1、テキスト ノードの場合は 3、IIRC)、「childNodes」の代わりに「children」配列を使用します。 "。

古いブラウザは children 配列を実装していない可能性があり、Internet Explorer は childNodes を反復処理するときに空白ノードを表示しない可能性があることに注意してください。

于 2012-07-09T20:25:42.170 に答える
0

いいえ、一部のブラウザーでは、最初の子は空白のみのテキスト ノードです。しかし、あなたは使うことができますElement.firstElementChild

于 2012-07-09T20:17:28.383 に答える