日期:2014-05-16  浏览次数:20368 次

为什么这样不能document.getElementById("form1").getElementsByName("a");
document.getElementById("form1").getElementsByName("a");
这样是不允许的,程序运行到这行会终止

document.getElementById("form1").getElementsByTagName("input");
这样却是允许的。

这是为什么,按照js的继承理论,form做为doc的子元素,应该能继承原型的所有特性,为何这里不行
我查了很多地方也没查出getElementsByName和getElementsByTagName这两个函数的限制区别


------解决方案--------------------
document.getElementById("form1").getElementsByName("a");

等于
var eElementObj=document.getElementById("form1");
var x=eElementObj.getElementsByName("a");

而getElementsByName是属于docoment对象的方法。element对象的方法有:
https://developer.mozilla.org/en-US/docs/Web/API/element?redirectlocale=en-US&redirectslug=DOM%2Felement

我推荐你看看这本书<<javascript DOM编程艺术>>
------解决方案--------------------
不好意思
我刚回头想了下 前面回答的太草率了
又具体看了
实际是这样的
HTMLFormElement.prototype.__proto__=HTMLElement
HTMLElement.prototype.__proto__=Element
Element.prototype.__proto__=Node

HTMLDocument.prototype.__proto__:=Document
Document.prototype.__proto__:=Node 
Node.prototype.__proto__=Object

===============Element
__proto__: Element
getElementsByClassName: function getElementsByClassName() { [native code] }
getElementsByTagName: function getElementsByTagName() { [native code] }
getElementsByTagNameNS: function getElementsByTagNameNS() { [native code] }
hasAttribute: function hasAttribute() { [native code] }

===========Document================
__proto__: Document
getCSSCanvasContext: function getCSSCanvasContext() { [native code] }
getElementById: function getElementById() { [native code] }
getElementsByClassName: function getElementsByClassName() { [native code] }
getElementsByName: function getElementsByName() { [native code] }
getElementsByTagName: function getElementsByTagName() { [native code] }
getElementsByTagNameNS: function getElementsByTagNameNS() { [native code] }