3

次のような HTML ページにフォームが指定されていることがわかりました。

<form name="form">
   <input type="image" name="foo" 
          src="somewhere.gif" alt="image" value="blah"/>
   <input type="text" name="bar" value="blah"/>
</form>

Javascript で DOM 経由で要素にアクセスする場合、画像入力の要素がありません。省略されているだけです。document.forms[0].elements.lengthは 1 で、はdocument.forms[0].element[0].type「テキスト」です。

これは Firefox と IE の場合のようです。この事実は、私の参考書や Web のどこにも記載されていません。私が見つけることができるのは、ここにある使い捨てのコメントだけです。

https://bugzilla.mozilla.org/show_bug.cgi?id=163822#c4

それは「まさにこのようなもの」を示唆しています。もしそうなら、まあまあ - しかし、それは本当にどこにも文書化されていませんか? それは歴史的な間違いですか、それとも理由がありますか?

4

4 に答える 4

2

それがelementsすべてのブラウザでのプロパティの動作のようです。

ただし、プロパティを使用して JavaScript の DOM からアクセスできるはずですchildNodes

あなたの例:

document.forms[0].childNodes.length; // equals 5 (2 inputs and 3 text nodes).
document.forms[0].childNodes[1];     // This is your input with type='image'
于 2008-10-29T14:27:34.520 に答える
0

自分で噛まれた。これは、MSDNDHTMLドキュメントに記載されています。

于 2008-10-29T18:02:22.527 に答える
0

実際、コメントを目にします:「DOM はそのように動作するはずです。それが Mozilla、NS4x、および IE での動作です。変更したくても変更できません。多くのサイトが機能しなくなるでしょう。」歴史的誤りに傾くでしょう。画像要素は既に HTML 2 DTD に含まれています...

おそらくそれは、作成者が getElement[s]ByXxx 関数 (または XPath!) を支持して、そのような Dom 階層の使用を思いとどまらせる可能性のある他の犯人のためです。

于 2008-10-29T17:56:18.670 に答える
0

興味深い... DOM 1仕様では次のように定義.elementsされています。

elements フォーム内のすべてのコントロール要素のコレクションを返します。

HTML 4仕様のパート17.2.1には「画像」タイプがリストされていないため、それが答えだと思います。

于 2008-10-29T14:36:44.733 に答える