鸟食轩

 Microsoft .NET[C#] MVP 2003
随笔 - 424, 文章 - 231, 评论 - 5407, 引用 - 344
数据加载中……

挺好玩的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 2005-02-18 23:39 birdshome 阅读(6276) 评论(2)  编辑 收藏 所属分类: Jscript&Dhtml开发

评论

#1楼 [楼主]   回复  引用  查看    

对了忘说了,正是因为HTML元素的uniqueID是lazy load方式生成的。所以任何一个HTML元素的uniqueID的具体取值和它在DHMTL树中的位置毫无关系,一个HTML元素的uniqueID就是只保证在一个页面作用域中unique!
2005-02-19 02:19 | birdshome      

#2楼    回复  引用    

突然有个问题,怎么知道一个属性是只读的?
总觉得用try,catch来被动判断很不保险
2005-11-15 14:46 | crazysoul [未注册用户]

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-09-28 19:54 编辑过
成果网帮您增加网站收入


相关链接: