HTML中ID与NAME的区别

本文详细阐述了HTML中ID与NAME属性的区别及其多种用途,包括服务器交互、元素分组、锚点设置等,并介绍了二者在动态创建元素时的不同表现。

======================================================
注:本文源代码点此下载
======================================================

html中id与name的区别

html中id与name的区别

可以说几乎每个做过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元素的服务器端的标示,比如inputselecttextarea和button等我们可以在服务器端根据其name通过request.params取得元素提交的值

用途2: html元素input type='radio'分组,我们知道radio button控件在同一个分组类,check操作是mutex的,同一时间只能选中一个radio,这个分组就是根据相同的name属性来实现的

用途3: 建立页面中的锚点,我们知道link是获得一个页面超级链接,如果不用href属性,而改用name,如:,我们就获得了一个页面锚点

用途4: 作为对象的identity,如appletobjectembed等元素比如在applet对象实例中,我们将使用其name来引用该对象

用途5: 在img元素和map元素之间关联的时候,如果要定义img的热点区域,需要使用其属性usemap,使usemap="#name"(被关联的map元素的name)

用途6: 某些特定元素的属性,如attribute,meta和param例如为object定义参数

或meta中

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

当然html元素的name属性在页面中也可以起那么一点id的作用,因为在dhtml对象树中,我们可以使用document.getelementsbyname来获取一个包含页面中所有指定name元素的对象数组name属性还有一个问题,当我们动态创建可包含name属性的元素时,不能简单的使用赋值element.name = "..."来添加其name,而必须在创建element时,使用document.createelement('')为元素添加name属性这是什么意思啊?看下面的例子就明白了

var input = document.createelement('input');

input.id = 'myid';

input.name = 'myname';

alert(input.outerhtml);

消息框里显示的结果是:

var input = document.createelement('');

input.id = 'myid';

alert(input.outerhtml);

消息框里显示的结果是:初始化name属性的这个设计不是ie的缺陷,因为msdn里说了要这么做的,可是这样设计的原理什么呢?我暂时没有想太明白

这里再顺便说一下,要是页面中有n(n>1)个html元素的id都相同了怎么办?在dhtml对象中怎么引用他们呢?如果我们使用aspx页面,这样的情况是不容易发生的,因为aspnet进程在处理aspx页面时根本就不允许有id非唯一,这是页面会被抛出异常而不能被正常的render要是不是动态页面,我们硬要让id重复那ie怎么搞呢?这个时候我们还是可以继续使用document.getelementbyid获取对象,只不过我们只能获取id重复的那些对象中在html render时第一个出现的对象而这时重复的id会在引用时自动变成一个数组,id重复的元素按render的顺序依次存在于数组中

文章的评论:

其实一句话:id和html页面内部元素相关,不和页面元素的内容相关name则更多地和页面元素的内容相关

看了看reference,name还有一个用途window.name,楼主是不是可以把这个也算上一个呢?最常见的就是windows.open的第二个参数,在html

绿色通道:好文要顶关注我收藏该文与我联系

posted on 2011-10-20 13:12 菰☆淚 阅读(4) 评论(0)编辑 收藏


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值