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 中似乎就是这种情况。我在我的参考书或网络上的任何地方都找不到这个事实。我只能在这里找到一个一次性评论:

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

这表明它“就是这样”。如果是这样,那就这样吧 - 但它真的没有任何地方记录吗?这是一个历史错误,还是有原因的?

4

4 回答 4

2

看起来这是elements所有浏览器中该属性的行为。

但是,您仍然应该能够使用该childNodes属性通过 JavaScript 中的 DOM 访问它。

对于您的示例:

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

确实,我看到了一条评论:“ 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 回答
0

我自己也被它咬过。它在 MSDN DHTML docs 中有说明

于 2008-10-29T18:02:22.527 回答