选择显示字体大小

深入学习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元素的服务器端的标示,比如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,meta和param。例如为object定义参数<param name = "appletparameter" value = "value">或meta中<meta name = "author" content = "dave raggett">。

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

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

<script language="javascript">
var input = document.createelement('input');
input.id = 'myid';
input.name = 'myname';
alert(input.outerhtml);
</script>

    消息框里显示的结果是:<input id=myid>。

<script language="javascript">
var input = document.createelement('<input name="myname">');
input.id = 'myid';
alert(input.outerhtml);
</script>

    消息框里显示的结果是:<input id=myid name=myname>。

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

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


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons