淺談html中id和name的區別執行個體代碼_經驗交流

來源:互聯網
上載者:User
我們可以通過一段代碼來分析一下其中的微妙差別:





在IE瀏覽器裡,我們可以通過多少方法來索引到這個文字框對象?(為區別起見,我們把NAME和ID設成了不同的值)
1. oDemo
2. demoform.oDemo
3. document.all.oDemo
4. document.all.demoform.oDemo
5. document.forms[0].oDemo
6. document.forms['demoform'].oDemo
7. document.forms['demoform'].childNodes[0]
8. document.forms['demoform'].elements[0]
9. document.getElementById('oDemo2')

以上9種索引方法在IE6裡面全部通過傳回值測試,不過值得注意的是最後一種:在IE6裡,我把索引對象寫成

document.getElementById('oDemo'),瀏覽器也能正確索引到對象,真是可怕的容錯性啊!!

接著問題來了,我們把這段代碼放在Mozilla Firefox 1.0裡再執行一次,只有第7種方法返回“undefined”,其他的方法可以正確

索引到對象,不過由於第3、4種方法用到了document.all這個IE專有對象,FF1.0雖然返回了正確的值,不過卻在控制台裡發出了警

告:警告:非標準的屬性 document.all。請使用 W3C 的標準形式 document.getElementById() 。

接下來我們把HTML文本類型定義得嚴格一點,在原始碼開頭加上:



使HTML文本按照HTML4.01標準去解析,在IE6裡照樣全部通過傳回值測試,不過在Mozilla Firefox 1.0裡麻煩就大了,第3、4種方法

沒有任何的傳回值,而在控制台裡發出了報錯資訊:錯誤: document.all has no properties ,而第7種方法依舊返回“undefined

”。

小 結

name原來是為了標識之用,但是現在根據規範,都建議用id來標識元素。

以下只能用name:
1. 表單(form)的控制項名,提交的資料都用控制項的name而不是id來控制。因為有許多name會同時對應多個控制項,比如

checkbox和radio,而id必須是全文檔中唯一的。此外瀏覽器會根據name來設定發送到伺服器的request。因此如果用id,伺服器是無

法得到資料的。
2. frame和window的名字,用於在其他frame或window指定target。

以下只能用id:
1. label與form控制項的關聯,
My Input

for屬性指定與label關聯的元素的id,不可用name替代。
2. CSS的元素選擇機制,以#MyId的方式指定應用樣式的元素,不能用name替代。
3. 指令碼中獲得對象:
IE支援在指令碼中直接以id(而不是name)引用該id標識的對象。例如上面的input,要在指令碼中獲得輸入的內容,可以直接以

MyInput.value來獲得。
如果用DOM的話,則用document.getElementById("MyInput").value,如果要用name的話,通常先得到包含控制項的form,例如

document.forms[0],然後從form再引用name,注意這樣得到的是經過計算後將發送給伺服器的值。

name與id的其他區別是:
id要符合標識的要求,比如大小寫敏感,最好不要包含底線(因為不相容CSS)。而name基本上沒有什麼要求,甚至可以用數字



用CSS控制這個連結的停留樣式,
可以這樣寫 #m_blog div.opt a:hover{color:#D57813} 或 #myLink:hover{color:#D57813}

NAME主要應用在互動式網頁,表單提交給某個伺服器端指令碼後接收變處理量使用。從原始碼的規範性和相容性角度出發,如在用戶端

指令碼裡要索引某個對象,建議用document.getElementById()方法,盡量不要直接使用NAME的值,當然如果不考慮相容性,以上9種方

法都可以在IE裡運行通過(IE5.0沒測試過)。

附:測試原始碼









  • 相關文章

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.