首页 > 代码库 > getElementByName()方法和getter属性,及与getElementById()的区别

getElementByName()方法和getter属性,及与getElementById()的区别

可以使用document.getElementByName()方法根据元素的name属性来获得元素。定义name属性的元素包括button、fieldset、input、keygen、output.select、textarea、form、iframe、object、map、meta、param。

getElementByName()获取的是具有相同name属性及值的集合,返回值类型是NodeList。由于ID通常具有唯一性,所以getElementById()通常获得的是对元素对象的引用,而且一般为特定的元素节点。而getter属性的返回值则可以是特定元素或者元素集合。

使用HTMLDocument接口的getter属性也可以达到跟getElementByName()相同的目的,对比如下:

var logoNodeList=document.getElementByName("logo");

var logoNodeList=document["logo"] 和var logoNodeList=document.logo 跟上面的方法具有相同的效果。

getter属性与getElementByName()方法有很多不同之处,getter属性的返回值是根据一个计算过程获得的,其类型会有变化。计算步骤如下:

  1. 首先获得所有具有特定name属性值的元素,组成元素集合
  2. 检查。如果集合中仅有一个元素,并且该元素是iframe,那么就返回该元素所表示的WindowProxy对象,后续步骤就不再进行;如果该元素不是iframe,那么就返回该元素,后续步骤就不再进行; 如果检查结果中包含多个元素,那么就返回所有具有特定name属性值的元素集合。
能够作为getter属性参数的name 也与getElementByName()方法不同,仅定义name属性的元素可以使用getter属性,包括applet、embed、form、iframe、img、object元素,并且applet、object元素的id属性值也可以作为name属性使用,img元素的id属性值也可以作为name属性使用,即使同时定义了name属性

但是getter属性不能获取定义了name属性的input元素。

并不是所有元素都能定义name户型,所有,不推荐使用getter属性与getElementByName()方法,除非特殊需要