document.getElementById("form1").getElementsByName("a");
这样是不允许的,程序运行到这行会终止document.getElementById("form1").getElementsByTagName("input");
这样却是允许的。这是为什么,按照js的继承理论,form做为doc的子元素,应该能继承原型的所有特性,为何这里不行
我查了很多地方也没查出getElementsByName和getElementsByTagName这两个函数的限制区别

解决方案 »

  1.   

    这是为什么,按照js的继承理论,form做为doc的子元素,应该能继承原型的所有特性
    re:
    js的继承跟dom树有关系吗?
      

  2.   

    我查了很多地方也没查出getElementsByName和getElementsByTagName这两个函数的限制区别
    re:
    elements = element.getElementsByTagName(tagName)
    elements = document.getElementsByName(name) 同学好好看看怎么没区别
      

  3.   

    name 是个元素属性  TagName是元素  你觉得呢~~
      

  4.   

    以前有个人跟我这么讲的,js的继承模型基于原型,因此父节点的属性可以很轻易的遗传的子节点上,所以从理论上说父节点能用的函数子节点都能用。你还是没解释他们的区别是什么,这两个函数一个是根据tagname返回集合,一个是根据name属性返回集合,但是这不能解释主楼的问题:我首先用id检索到form节点,此时可以用tag检索form的子节点,却不能用name属性?为什么?我当然知道,问题是首楼的问题到底是为什么,form的子节点里绝对具备name属性的元素,却无法被检索?没有任何一个地方讲过getElementsByName不能检索子节点。
      

  5.   

    同学
    getElementsByTagName是element对象的方法
    getElementsByName是document对象的方法这没看出来
      

  6.   

    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编程艺术>>
      

  7.   

    form.constructor  (form = document.getElementByID('FORM的id'))
    function HTMLFormElement() { [native code] }document.constructor
    function HTMLDocument() { [native code] } 从这里可以看出  form 和 document 没有继承关系
      

  8.   

    不好意思
    我刚回头想了下 前面回答的太草率了
    又具体看了
    实际是这样的
    HTMLFormElement.prototype.__proto__=HTMLElement
    HTMLElement.prototype.__proto__=Element
    Element.prototype.__proto__=NodeHTMLDocument.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] }
    getOverrideStyle: function getOverrideStyle() { [native code] }
    ====================================有公共超类 node他们都自己单独 定义了 getelement 方法
    但是  Document.prototype 独立定义了 方法   getElementsByName