`
LakeGuihuWithU
  • 浏览: 7976 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
最近访客 更多访客>>
社区版块
存档分类

细说HTML元素的ID和Name属性的区别 <转>

    博客分类:
  • JSP
阅读更多

可以说几乎每个做过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页面,这样的情况是不容易发生的,因为aspnet进程在处理aspx页面时根本就不允许有ID非唯一,这是页面会被抛出异常而不能被正常的render。要是不是动态页面,我们硬要让ID重复那IE怎么搞呢?这个时候我们还是可以继续使用document.getElementById获取对象,只不过我们只能获取ID重复的那些对象中在HTML Render时第一个出现的对象。而这时重复的ID会在引用时自动变成一个数组,ID重复的元素按Render的顺序依次存在于数组中。

 

 

 

name=id 
 
一个是netscape的  一个microsoft的  都是标记对象名称 
--------------------------------------------------------------- 
 
表单元素(form  input  textarea  select)与框架元素(iframe  frame)用  name 
这些元素都与表单(框架元素作用于form的target)提交有关,  在表单的接收页面只 
接收有name的元素,  赋ID的元素通过表单是接收不到值的,  你自己可以验证一下. 
 
当然上述元素也可以赋ID值,  赋ID值的时候引用这些元素的方法就要变一下了. 
赋  name:  document.formName.inputName        document.frames("frameName") 
赋  ID    :  document.all.inputID                      document.all.frameID 
 
只能赋ID不能赋name的元素:(除去与表单相关的元素都只能赋ID) 
body  li  a  table  tr  td  th  p  div  span  pre  dl  dt  dd  font  b  等等

 

 

就提交表单而言,还是使用name较简单
如果非要使用id提交表单,可以参照下面的办法
<script language="javascript">
function submitForm()
{
this.location="form.asp?input="+document.getElementById("input1").value;
}
</script>
<form method="post" action="form.asp">
<input id="input1"/>
<div onclick="submitForm" style="cursor:hand">提交</div>
</form>
form.asp中用request.QueryString("input")来获得表单内容

其实这种方法无论是否在表单中都可以使用,比表单的使用根据有灵活性,但使用方法也较表单复杂。

分享到:
评论
1 楼 808_小星星 2012-03-06  
好东西。。。

相关推荐

    1.泛型类 、通配符的使用、通配符的上限和下限 编写泛型类Stack<E>,该类中定义一个成员变量和如下方法:

    private LinkedList&lt;E&gt; elements = new LinkedList&lt;&gt;(); ``` **构造方法**: ```java public Stack() { // 初始化空栈 } ``` **入栈(push)方法**: ```java public void push(E element) { elements.addFirst...

    细说PHP第二版 源码

    &lt;html&gt; &lt;!-- HTML文件开始 --&gt; &lt;head&gt; &lt;!-- HTML文件的头部开始 --&gt; ... ... &lt;!-- HTML文件的头部内容 --&gt; &lt;/head&gt; &lt;!-- HTML文件的头部结束 --&gt; &lt;body&gt; &lt;!-- HTML文件的主体开始 --&gt;...

    vlan学习笔记

    &lt;br&gt;&lt;br&gt;VLAN学习笔记大全(2):VLAN的访问链接&lt;br&gt;交换机的端口&lt;br&gt;&lt;br&gt; 交换机的端口,可以分为以下两种:&lt;br&gt;&lt;br&gt; l 访问链接(Access Link)&lt;br&gt;&lt;br&gt; l 汇聚链接(Trunk Link)&lt;br&gt;&lt;br&gt; 接下来就让我们来依次...

    JavaScript Table行定位效果

    还要注意的是id属性也会被克隆,也就是克隆后会有两个相同id的元素(如果克隆对象有设置的话),这很容易会导致其他问题,程序会把克隆table的id属性设空。 ps:table请用class来绑定样式,用id的话新table就获取不...

    左侧红色js悬浮QQ在线客服插件代码

    &lt;div class="scrollsidebar" id="hhService"&gt; &lt;div class="side_content"&gt; &lt;div class="side_list"&gt; &lt;div class="side_title"&gt; &lt;a title="隐藏" class="close_btn"&gt;&lt;span&gt;关闭&lt;/span&gt;&lt;/a&gt;&lt;/div&gt; &lt;div class=...

    mvmmall开源网店系统源码 5.0.0

    &lt;p&gt;&lt;fontface&gt;六、稳定性安全性:MvMmall_V5.0.0我们在开发过程中,对一些不安全因素和代码都做了过滤,并且在一些容易引起安全问题的页面的元素重新初始化,使得我们的系统在安全稳定方面有着不错的表现。&lt;/font&gt;&lt;/...

    细说PHP2笔记

    •Mqrkup是由&lt;或&gt;及字符串组成,如&lt;img /&gt;,&lt;p&gt;&lt;/p&gt;; •是一种编程语言,也是用浏览器解释的语言。 CSS基础 CSS是Cascading style sheets的缩写 •是一种用来表现HTML样式的语言; •不能独立使用 •没有html就没有...

    《细说PHP》配套源码.rar

    echo '支持[&lt;span class="red"&gt;'.$comm-&gt;setSupport($_GET["cid"], 1).'&lt;/span&gt;]'; }else if($_GET["action"]=="2"){ echo '反对[&lt;span class="red"&gt;'.$comm-&gt;setSupport($_GET["cid"], 2).'&lt;/span&gt;]'; } //...

    Better Faster Lighter Java

    Tate&lt;br/&gt;&lt;br/&gt;下载网址:&lt;br/&gt;http://www.j2medev.com/ebook/jese/200605/701.html&lt;br/&gt;&lt;br/&gt;书籍图片:&lt;br/&gt;http://www.j2medev.com/ebook/UploadSoftPic/200605/20060531090149545.jpg&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Java 的...

    详解关于element el-button使用$attrs的一个注意要点

    之前需要对 el-button 做二次封装,所以就用到 vue 的 $attrs 和 $listeners 属性,这两个属性在这不细说,可以在这里 查看详情。 二次封装代码(limit-button) &lt;template&gt; &lt;el v-show=validButton v-bind=$...

    细说Web应用开发的一致框架Tapestry

    &lt;br&gt;Tapestry框架是一个位于java servlet容器和Tapestry应用程序之间的层。Tapestry不是一个独立运行的服务器;它是一个servlet的扩展,它运行于servlet容器(例如Tomcat)或包含servlet容器的应用服务器中(如Jbose...

    细说HTML5高级API PDF 下载

    本书分为三部分,*部分是介绍HTML5的移动端布局和不同平台下Node.js和Cordova的环境搭建,第二部分介绍Cordova的常用核心API,包含了事件处理,地理位置,Web存储,多媒体等等。第三部分介绍了HTML5高级API中的几个...

    《细说PHP》

    《细说PHP》作为一本面向PHP应用开发新手的入门教材,覆盖了PHP语言的基础知识和应用实践。书中内容既实用又全面,这使得它非常适合那些刚接触PHP或者准备开始PHP学习的读者。 首先,初学者需要了解的是PHP的基础...

    java文件操作类

    本人写的一个文件操作的帮助类。包括:&lt;br/&gt;1)建立,读取,删除文件等基础方法&lt;br/&gt;2)获得读取文件的流,并可以设置读取文件的编码方式,从而有效...&lt;br/&gt;4)其他还有把两个文件合成一个文件等等方法,就不一一细说。

    韩顺平 2011细说Servlet笔记

    在`web.xml`部署描述符中,可以通过`&lt;servlet&gt;`、`&lt;servlet-mapping&gt;`等元素来配置Servlet,定义Servlet的类名、URL映射等信息。 5. **HTTP请求与响应** Servlet主要处理HTTP请求,并生成HTTP响应。`...

    细说C++类型转换操作符

    C++语言虽然兼容C,也支持C语言的类型转换用法,是将类型用圆括号括起来,这种转换可视性比较差,难以跟踪错误的转换。...  这四个操作符的使用方法是相同的,都是cast-name&lt;Type&gt;(expression),Type是被转换值expr

    韩顺平_细说jsp第1讲.开山篇

    3. JSP基本结构:讲解JSP页面的基本组成元素,如HTML标记、脚本元素(&lt;%...%&gt;)、脚本let、声明、表达式和指令(&lt;%@...%&gt;)。 4. JSP动态内容:通过实例展示如何在JSP中嵌入Java代码,实现动态网页功能,如显示时间...

    程序员面试刷题的书哪个好-js-web-skills:webjsphp相关开发经验总结

    细说PHP中strlen和mb_strlen的区别 //测试时文件的编码方式要是UTF8 $str='\u4e2d\u6587a\u5b571\u7b26'; echo strlen($str).'&lt;br&gt;';//14 echo mb_strlen($str,'utf8').'&lt;br&gt;';//6 echo mb_strlen($str,'gbk').'&lt;br&gt;...

Global site tag (gtag.js) - Google Analytics