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] }