[ js ] document.getElementById与getElementByName的区别

链接: http://www.usity.org/1616.html 

[ js ] document.getElementById与getElementByName的区别

1:id 就像身分证号,是唯一的, name 就像姓名一样可以同名 

2:一个元素定义了 id ,引用该元素时直接用 id 属性,而 name 通常用在 form 中,且必须由 document.form.*** 而来,也就是说, name 属性定义的元素在脚本中是 document 对象的子对象。 

3:name 用于 form 内元素,提交需要 
id 用于 form 外元素好用因为 DOM 能直接取得单一元素 
document.getElementById( "id_Number ") 得到的是单个元素 
document.getElementsByName( "name ") 得到的是数组 

4:id 每页只能有一个 
name 可以有多个 
name 有些标签不推荐用它 
取得 id :document.getElementById( "idname ") 
取得 name : document.getElementsByName( "name ")[0?1?2?3?....] 

5: 表单元素 (form input textarea select) 与框架元素 (iframe frame) 用 name 
这些元素都与表单 ( 框架元素作用于 form 的 target) 提交有关 , 在表单的接收页面只 
接收有 name 的元素 , 赋 ID 的元素通过表单是接收不到值的 , 你自己可以验证一下 . 

有一个例外 : A 可以赋 name 作为锚点 , 也可以赋 ID ; 
只能赋 ID 不能赋 name 的元素 除去与表单相关的元素都只能赋 ID) 
body li table tr td th p div span pre dl dt dd font b 等等。 

6:几乎每个做过 Web 开发的人都问过,到底元素的 ID 和 Name 有什么区别阿?为什么有了 ID 还要有 Name 呢 ? 而同样我们也可以得到*** classical 的答案: ID 就像是一个人的身份证号码,而 Name 就像是他的名字, ID 显然是唯一的,而 Name 是可以重复的。 

 上周我也遇到了 ID 和 Name 的问题,在页面里输入了一个 input type= "hidden " ,只写了一个 ID= 'SliceInfo ' ,赋值后 submit ,在后台用 Request.Params[ "SliceInfo "] 却怎么也去不到值。后来恍然大悟因该用 Name 来标示,于是在 input 里加了个 Name= 'SliceInfo ' ,就一切 ok 了。 

******段里对于 ID 和 Name 的解答说的太笼统了,当然那个解释对于 ID 来说是完全对的,它就是 Client 端 HTML 元素的 Identity 。而 Name 其实要复杂的多,因为 Name 有很多种的用途,所以它并不能完全由 ID 来代替,从而将其取消掉。 

具体用途有: 
用途 1: 作为可与服务器交互数据的 HTML 元素的服务器端的标示,比如 input 、 select 、 textarea 、和 button 等。我们可以在服务器端根据其 Name 通过 Request.Params 取得元素提交的值。 
用途 2: HTML 元素 Input type= 'radio ' 分组,我们知道 radio button 控件在同一个分组类, check 操作是 mutex 的,同一时间只能选中一个 radio ,这个分组就是根据相同的 Name 属性来实现的。 
用途 3: 建立页面中的锚点,我们知道 <a href= "URL "> link </a> 是获得一个页面超级链接,如果不用 href 属性,而改用 Name ,如: <a name= "PageBottom "> </a> ,我们就获得了一个页面锚点。 
用途 4: 作为对象的 Identity ,如 Applet 、 Object 、 Embed 等元素。比如在 Applet 对象实例中,我们将使用其 Name 来引用该对象。 
用途 5: 在 IMG 元素和 MAP 元素之间关联的时候,如果要定义 IMG 的热点区域,需要使用其属性 usemap ,使 usemap= "#name "( 被关联的 MAP 元素的 Name) 。 
用途 6: 某些特定元素的属性,如 attribute ,和 param 。例如为 Object 定义参数 <PARAM NAME = "appletParameter " VALUE = "value "> 。 

显然这些用途都不是能简单的使用 ID 来代替掉的,所以 HTML 元素的 ID 和 Name 的却别并不是身份证号码和姓名这样的区别,它们更本就是不同作用的东西。 

当然 HTML 元素的 Name 属性在页面中也可以起那么一点 ID 的作用,因为在 DHTML 对象树中,我们可以使用 document.getElementsByName 来获取一个包含页面中所有指定 Name 元素的对象数组。 

在这里顺便说一下,要是页面中有 n(n> 1) 个 HTML 元素的 ID 都相同了怎么办?在 DHTML 对象中怎么引用他们呢?如果我们使用 ASPX 页面,这样的情况是不容易发生的,因为 aspnet 进程在处理 aspx 页面时根本就不允许有 ID 非唯一,这是页面会被抛出异常而不能被正常的 render 。要是不是动态页面,我们硬要让 ID 重复那 IE 怎么搞呢? 

这个时候我们还是可以继续使用 document.getElementById 获取对象,只不过我们只能获取 ID 重复的那些对象中在 HTML Render 时******个出现的对象。而这时重复的 ID 会在引用时自动变成一个数组, ID 重复的元素按 Render 的顺序依次存在于数组中。 

转载于:http://shirlly.iteye.com/blog/221320

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

使用新浪微博登陆