挺好玩的uniqueID&uniqueNumber属性

    在Web页中的每个HTML元素都一个ID属性,ID作为其标示,在我们的普通理解中它应该是unique的。可是HTML元素的ID属性是可写的,这就造成了我们很可能人为的使ID的重复。按么如果ID重复了怎么办呢?我们又怎么来给HTML元素弄一个唯一的标示呢?

    由于IE对格式混乱(不完整的或有错嵌套关系)的HTML代码由极好的容错性,对于HTML元素的ID重复问题对它来说简直就是小菜一碟。如果出现这种情况,比如:
 <div id="divText">The first line.</div>
 
<div id="divText">The second line.</div>

    这时的divText就不是一个对DIV元素的引用了,而变成了一个数组,其中包含两个元素,并按两个DIV元素在DHTML对象树种出现的次序排序。

    这样的ID怎么用啊? 是不是觉得有种被IE晃点了的感觉呢?!

    幸好IE迷途知返,在5.0后为HTML元素提供了一个uniqueID的只读属性。这下好,给它弄成readonly的了,看丫还乱不乱?!  还好真的不乱了,不过怎么说这个uniqueID有趣呢?因为uniqueID本身不提供default的值,就是说IE在解析完HTML代码构建了DHMTL树后,并不会给HTML元素分配uniqueID。而需要我们去访问了HTML元素的uniqueID属性后,才会为其生成这个uniqueID的值。其实就是lazy initialize技术,只是放在这里觉得比较好玩。对于uniqueNumber,它是相对于uniqueID的,uniqueID的格式是:ms__id\d+。即一个"ms__id"前缀加一个流水号。所以这个uniqueNumber就是单独表示那个流水号码的。

    uniqueID第二个好玩的地方是,document对象也具有这个属性,不过它和其它HTML的uniqueID属性的意义是完全不同的。当我们每调用一次document.uniqueID,系统就会返回一个新的uniqueID值,不过doucment没有uniqueNumber属性哈。

    这时我想起来我在用Popup窗口制作无限级菜单时,构造的__MenuCache__类中,自己实现了一个unique id的产生结构,就有些多此一举了

posted on   birdshome  阅读(8372)  评论(2编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器

导航

点击右上角即可分享
微信分享提示