您好,欢迎访问一九零五行业门户网

HTML元素的ID和Name属性的区别_HTML/Xhtml_网页制作

今天對 有點疑惑, 加上#表示一個錨,後面跟上13,就會跳到本頁面的13的位置,而這個13就是 name屬性值。怎麼不
是id值呢???所以查了下id 和name的區別,特記錄
最classical的答案:id就像是一个人的身份证号码,而name就像是他的名字,id显然是唯一的,而name是可以重复的。
显然这个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: 建立页面中的锚点,我们知道link是获得一个页面超级链接,如果不用href属性,而改用name,如:,我们就获得了一个页面锚点。
用途4: 作为对象的identity,如applet、object、embed等元素。比如在applet对象实例中,我们将使用其name来引用该对象。
用途5: 在img元素和map元素之间关联的时候,如果要定义img的热点区域,需要使用其属性usemap,使usemap=#name(被关联的map
元素的name)。
用途6: 某些特定元素的属性,如attribute,meta和param。例如为object定义参数或meta中。
显然这些用途都不是能简单的使用id来代替掉的,所以html元素的id和name的却别并不是身份证号码和姓名这样的区别,它们更本就是不同作
用的东西。
我们可以通过一段代码来分析一下其中的微妙差别:
复制代码
代码如下:
在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主要应用在交互式网页,表单提交给某个服务器端脚本后接收变处理量使用。从源代码的规范性和兼容性角度出发,如在客户端脚本里要索引某个对象,建议用
document.getelementbyid()
另外举个简单的例子:
用户名:
密码:
如果我要获得用户名和密码;js用name获得的话,就得写成document.form1.username.value;
document.form1.password.value;
用id获得:
docuement.getelementbyid(username);
docuement.getelementbyid(pwd);
有时候name 可能会出现相同的名字,所以这时候我们用name获得就无法确定获得的是哪个值了。
document.getelemntsbyname(username);
这里得到的是一个数组
其它类似信息

推荐信息