在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的产生结构,就有些多此一举了

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

对了忘说了,正是由于HTML元素的uniqueID是lazy load方式生成的。所以不论什么一个HTML元素的uniqueID的详细取值和它在DHMTL树中的位置毫无关系,一个HTML元素的uniqueID就是仅仅保证在一个页面作用域中unique!

2005-02-19 02:19 | birdshome  

javascript UniqueID属性的更多相关文章

  1. JavaScript document属性和方法

    JavaScript document属性和方法 --------------------------------------------属性: 1. Attributes     存储节点的属性列表 ...

  2. JavaScript 全局属性/函数

    JavaScript 全局 JavaScript 全局属性和方法可用于创建Javascript对象. JavaScript 全局属性 属性 描述 Infinity 代表正的无穷大的数值. NaN 指示 ...

  3. 删除要被替换的元素的所有事件处理 程序和 JavaScript 对象属性

    使用本节介绍的方法替换子节点可能会导致浏览器的内存占用问题,尤其是在 IE 中,问题更加明显.在删除带有事件处理程序或引用了其他 JavaScript 对象子树时,就有可能导致内存占用问题.假设 某个 ...

  4. Javascript对象属性与方法汇总

    Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...

  5. javascript 节点属性详解

    javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...

  6. JavaScript对象属性的基础教程指南

    JavaScript是使用“对象化编程”的,或者叫“面向对象编程”的.所谓“对象化编程”,意思是把JavaScript能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所有的编 ...

  7. JavaScript对象属性访问的两种方式

    JavaScript对象属性访问的两种方式 object.attribute object["attribute"] 例如: var employees = [ { "f ...

  8. javascript对属性的操作

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. JavaScript:属性的操作

    一.属性的设置和获取 1.属性的设置和获取主要有两种方式: <!DOCTYPE html> <html lang="en"> <head> &l ...

随机推荐

  1. WinExec函数,启动其他应用程序

    WinExec The WinExec function runs the specified application. Note  This function is provided only fo ...

  2. Hadoop--序列化

    序列化: 对象的序列化用于将一个对象编码成字节流,以及从字节流中重新构建对象. 将一个对象编码成一个字节流称为序列化该对象. 序列化三种主要的用途: 1.作为一种持久化格式. 2.作为一种通信的数据格 ...

  3. Java加入背景音乐

    近期有几个师妹找我给她们的Java期末作业加入背景音乐,非常久不琢磨Java的我花费整晚才搞定,羞愧.在博客中记录下来.警示自己.也帮助一下大家. Java中能够通过AudioClip类来实现音乐播放 ...

  4. KL25开发板利用串口蓝牙与PC通信

    KL25开发板芯片本身支持三个串口,uart0,uart1,uart2.其中uart0不太一样,在数据手册里面单独一章介绍:而uart1和uart2则是一样的. 我所使用的串口蓝牙模块是BC04,支持 ...

  5. HDU--杭电--4502--吉哥系列故事——临时工计划--背包--01背包

    吉哥系列故事——临时工计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  6. 第四章 Spring与JDBC的整合

    这里选择的是mysql数据库. 4.1引入aop.tx的命名空间 为了事务配置的需要,我们引入aop.tx的命名空间 <?xml version="1.0" encoding ...

  7. svn自动发用户名密码到邮件(明文密码)

    #!/bin/sh touch testlist cat /dev/null > testlist grep "=" passwd |grep -v "#" ...

  8. Jar包转成Dll的方式(带嵌套的jar也能做) (转)

    研究很好几天,终于成功了.因为写了一个Java的项目,现在要求要改写成C#版本的.但是其中用到了svnkit,svnkit是java平台的.改写成C#的话,要使用SharpSVN,但是SharpSVN ...

  9. RIO包 健壮的I/O函数代码

    下面是关于 #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/t ...

  10. OCA读书笔记(9) - 管理数据同步

    9.Managing Data Concurrency 描述锁机制以及oracle如何管理数据一致性监控和解决锁冲突 管理数据的并发--管理锁数据的不一致:脏读更改丢失幻影读 脏读:数据是指事务T2修 ...