id的兄弟—uniqueID
来源:互联网 发布:梁朝伟刘嘉玲 知乎 编辑:程序博客网 时间:2024/05/16 15:26
众所周知,id是不可以重复的,但是现在的浏览器对重复的id都是默许的,且ID属性是可写的,这往往造成人们对其重复性的误用。不过,IE对格式混乱(不完整的或有错嵌套关系)的HTML代码由极好的容错性,且看以下实例:
<divid="div_1">玛雅人是大忽悠</div>
<divid="div_1">玛雅人还是大忽悠</div>
<div id="div_1">玛雅人依旧是大忽悠</div>
这时div_1变成了一个数组,包含两个元素,并按3个DIV元素在DHTML对象树种出现的次序排序,而非对div的引用了。
很显然,理论和现实有时真得是差十万八千里,说好的id唯一性呢???
这个时候,作为IE浏览器为页面上的所有元素提供的唯一名称——uniqueID酱登场了
(注意:它是微软为HTML元素扩充的专有属性,不遵循W3C的规范)。
让我们来看下他的简历:
1. 采用lazy initialize技术
(本身不提供default的值,即IE在解析完HTML代码构建了DHMTL树后,并不会给HTML元素分配uniqueID。而需要我们去访问了HTML元素的uniqueID属性后,才会为其生成这个uniqueID的值。)
2. Id格式为:ms__id\d+
3.readonly
(只读:搞 IT的应该太熟悉该英文了)
4.document的属性之一
(不过它和其它HTML的uniqueID属性的意义是完全不同的。当我们每调用一次document.uniqueID,系统就会返回一个新的uniqueID值)
5.与id同属一套元素表示体系
(只是这个uniqueID有一些undocumented的特性,是纯客户端的标示方案。)
6. 生成方式和id完全不同外,其它表现和id是一样的
我们可以通过这个uniqueID直接引用元素,就像id一样,只是由于uniqueID是动态生成的,所以我们也只能动态使用这个uniqueID,而不能以literal形式来使用。下面是一个使用示例:
var uniqueID = {};
var span = document.createElement('span');
document.body.appendChild(span);
uniqueID [span.uniqueID] = span;
这样我们就通过uniqueID将span缓存起来了,已有要引用这个span,就可以这样:
var elements = g_ELEMENTS.GetExpandoKeys();
for ( var i=0 ; i < elements.length ; ++i )
{
var element = eval(elmenets[i]);
// todo: other logic
}
除了使用eval来引用这个uniqueID外,getElementById也有一个undocumented的特性,就是它也支持uniqueID,这样一来,我们就可以使用getElementById(elements[i])来绝对唯一的引用一个页面元素。
使用uniqueID的好处:
1 为元素生成真正的unique的id
2将动态元素cache起来,做统一管理。
(特别是在实现动态在的TreeView时,如果合理使用uniqueID到来的好处避免很多需要对树进行反复递归遍历才能完成的工作)
3 uniqueID是IE的DOM提供的原生解决方案
(比自己去做unique标示要方面高效的多)
4利于对元素检索。
ie能识别出名为uniqueID的document对象的专用属性,名为uniqueID,ie是唯一能够识别这个属性的浏览器,所以uniqueID很适合用来确定脚本是不是在Ie中运行。
该文总结于多篇网上的博文~
- id的兄弟—uniqueID
- ClientID/UniqueID/ID的区别
- ID,ClientID,UniqueID的区别
- ID,ClientID,UniqueID的区别
- ID,ClientID,UniqueID的区别
- asp.net 控件的 ID ,ClientID ,UniqueID 区别--备忘
- asp.net 控件的 ID ,ClientID ,UniqueID 区别
- asp.net 控件的 ID ,ClientID ,UniqueID 区别
- asp.net 控件的 ID ,ClientID ,UniqueID 区别
- ASP.NET 的服务器端控件有三种关于 ID 的属性 ID, ClientID 和 UniqueID
- .NET中服务器控件的ID, ClientID和UniqueID属性的区别
- .NET中服务器控件的ID, ClientID和UniqueID属性的区别
- ASP.NET 4.0的ID,ClientID,UniqueID及ClientIDMode属性篇
- ASP.NET控件ID, ClientID, UniqueID区别
- UniqueID和ClientID的来源
- 服务器端控件三种ID:ID,ClientID和UniqueID
- 服务器端控件三种ID:ID,ClientID和UniqueID
- 服务器端控件三种ID:ID,ClientID和UniqueID
- oracle dblink详解
- 支配值数目-------2012年12月25日
- C#弹出选择对话框程序
- mtl_material_transactions的COST字段定义
- 验证
- id的兄弟—uniqueID
- AMD官方宣布要做ARM架构了
- sqlldr--将OS中非oracle数据导入oracle(一)
- Win7重新分区指令
- 如何把linux设置成cisco路由器的日志服务器?
- 利用itext进行html转pdf
- MySQL命令行--导入导出数据库
- 原先能正常使用的java,一段时间后无法使用
- sqlldr常规路径----导入500W行os数据到oracle的实验(一)