06-09-22
简单介绍
ID
与
name
的区别
http://5idev.net/javascript/ID/name/396656
l
id
就像身分证号,是唯一的,
name
就像姓名一样可以同名
l
一个元素定义了
id
,引用该元素时直接用
id
属性,而
name
通常用在
form
中,且必须由
document.form.***
而来,也就是说,
name
属性定义的元素在脚本中是
document
对象的子对象。
l
name
用于
form
内元素,提交需要
id
用于
form
外元素好用因为
DOM
能直接取得单一元素
document.getElementById("id_Number")
得到的是单个元素
document.getElementsByName("name")
得到的是数组
l
id
每页只能有一个
name
可以有多个
name
有些标签不推荐用它
取得
id :document.getElementById("idname")
取得
name
:
document.getElementsByName("name")[0?1?2?3?....]
l
表单元素
(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
等等。
l
几乎每个做过
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
的顺序依次存在于数组中。