06-09-22
簡(jiǎn)單介紹
ID
與
name
的區(qū)別
http://5idev.net/javascript/ID/name/396656
l???????
id
就像身分證號(hào),是唯一的,
name
就像姓名一樣可以同名
l???????
一個(gè)元素定義了
id
,引用該元素時(shí)直接用
id
屬性,而
name
通常用在
form
中,且必須由
document.form.***
而來(lái),也就是說(shuō),
name
屬性定義的元素在腳本中是
document
對(duì)象的子對(duì)象。
l???????
name
用于
form
內(nèi)元素,提交需要
id
用于
form
外元素好用因?yàn)?/span>
DOM
能直接取得單一元素
?
document.getElementById("id_Number")
得到的是單個(gè)元素
document.getElementsByName("name")
得到的是數(shù)組
?
l???????
id
每頁(yè)只能有一個(gè)
name
可以有多個(gè)
name
有些標(biāo)簽不推薦用它
取得
id :document.getElementById("idname")
取得
name
:
document.getElementsByName("name")[0?1?2?3?....]
?
l???????
表單元素
(form input textarea select)
與框架元素
(iframe frame)
用
name
這些元素都與表單
(
框架元素作用于
form
的
target)
提交有關(guān)
,
在表單的接收頁(yè)面只
接收有
name
的元素
,
賦
ID
的元素通過(guò)表單是接收不到值的
,
你自己可以驗(yàn)證一下
.
有一個(gè)例外
: A
可以賦
name
作為錨點(diǎn)
,
也可以賦
ID
;
?
只能賦
ID
不能賦
name
的元素
:(
除去與表單相關(guān)的元素都只能賦
ID)
body li table tr td th p div span pre dl dt dd font b
等等。
?
l???????
幾乎每個(gè)做過(guò)
Web
開(kāi)發(fā)的人都問(wèn)過(guò),到底元素的
ID
和
Name
有什么區(qū)別阿?為什么有了
ID
還要有
Name
呢
?
而同樣我們也可以得到最
classical
的答案:
ID
就像是一個(gè)人的身份證號(hào)碼,而
Name
就像是他的名字,
ID
顯然是唯一的,而
Name
是可以重復(fù)的。
?
上周我也遇到了
ID
和
Name
的問(wèn)題,在頁(yè)面里輸入了一個(gè)
input type="hidden"
,只寫(xiě)了一個(gè)
ID='SliceInfo'
,賦值后
submit
,在后臺(tái)用
Request.Params["SliceInfo"]
卻怎么也去不到值。后來(lái)恍然大悟因該用
Name
來(lái)標(biāo)示,于是在
input
里加了個(gè)
Name='SliceInfo'
,就一切
ok
了。
?
第一段里對(duì)于
ID
和
Name
的解答說(shuō)的太籠統(tǒng)了,當(dāng)然那個(gè)解釋對(duì)于
ID
來(lái)說(shuō)是完全對(duì)的,它就是
Client
端
HTML
元素的
Identity
。而
Name
其實(shí)要復(fù)雜的多,因?yàn)?/span>
Name
有很多種的用途,所以它并不能完全由
ID
來(lái)代替,從而將其取消掉。
?
具體用途有:
?
用途
1:?
作為可與服務(wù)器交互數(shù)據(jù)的
HTML
元素的服務(wù)器端的標(biāo)示,比如
input
、
select
、
textarea
、和
button
等。我們可以在服務(wù)器端根據(jù)其
Name
通過(guò)
Request.Params
取得元素提交的值。
用途
2:? HTML
元素
Input type='radio'
分組,我們知道
radio button
控件在同一個(gè)分組類(lèi),
check
操作是
mutex
的,同一時(shí)間只能選中一個(gè)
radio
,這個(gè)分組就是根據(jù)相同的
Name
屬性來(lái)實(shí)現(xiàn)的。
?
用途
3:?
建立頁(yè)面中的錨點(diǎn),我們知道
<a href="URL">link</a>
是獲得一個(gè)頁(yè)面超級(jí)鏈接,如果不用
href
屬性,而改用
Name
,如:
<a name="PageBottom"></a>
,我們就獲得了一個(gè)頁(yè)面錨點(diǎn)。
?
用途
4:?
作為對(duì)象的
Identity
,如
Applet
、
Object
、
Embed
等元素。比如在
Applet
對(duì)象實(shí)例中,我們將使用其
Name
來(lái)引用該對(duì)象。
?
用途
5:?
在
IMG
元素和
MAP
元素之間關(guān)聯(lián)的時(shí)候,如果要定義
IMG
的熱點(diǎn)區(qū)域,需要使用其屬性
usemap
,使
usemap="#name"(
被關(guān)聯(lián)的
MAP
元素的
Name)
。
?
用途
6:?
某些特定元素的屬性,如
attribute
,和
param
。例如為
Object
定義參數(shù)
<PARAM NAME = "appletParameter" VALUE = "value">
。
?
顯然這些用途都不是能簡(jiǎn)單的使用
ID
來(lái)代替掉的,所以
HTML
元素的
ID
和
Name
的卻別并不是身份證號(hào)碼和姓名這樣的區(qū)別,它們更本就是不同作用的東西。
?
當(dāng)然
HTML
元素的
Name
屬性在頁(yè)面中也可以起那么一點(diǎn)
ID
的作用,因?yàn)樵?/span>
DHTML
對(duì)象樹(shù)中,我們可以使用
document.getElementsByName
來(lái)獲取一個(gè)包含頁(yè)面中所有指定
Name
元素的對(duì)象數(shù)組。
?
在這里順便說(shuō)一下,要是頁(yè)面中有
n(n>1)
個(gè)
HTML
元素的
ID
都相同了怎么辦?在
DHTML
對(duì)象中怎么引用他們呢?如果我們使用
ASPX
頁(yè)面,這樣的情況是不容易發(fā)生的,因?yàn)?/span>
aspnet
進(jìn)程在處理
aspx
頁(yè)面時(shí)根本就不允許有
ID
非唯一,這是頁(yè)面會(huì)被拋出異常而不能被正常的
render
。要是不是動(dòng)態(tài)頁(yè)面,我們硬要讓
ID
重復(fù)那
IE
怎么搞呢?
?
這個(gè)時(shí)候我們還是可以繼續(xù)使用
document.getElementById
獲取對(duì)象,只不過(guò)我們只能獲取
ID
重復(fù)的那些對(duì)象中在
HTML Render
時(shí)第一個(gè)出現(xiàn)的對(duì)象。而這時(shí)重復(fù)的
ID
會(huì)在引用時(shí)自動(dòng)變成一個(gè)數(shù)組,
ID
重復(fù)的元素按
Render
的順序依次存在于數(shù)組中。