我们知道要在Web页面中引用一个HTML元素,最简单的方法就是使用getElementById方法,或其类似的一组getElementsByXxx方法。可是这里需要注意的是,这些方法其实都不能完全绝对的唯一确定对一个元素的引用。

至于getElementsByXxx我们不说了,它本身就是getElements,很明白了,那么getElementById也不能唯一确定一个元素吗?当然是,不能。由于html的不严格性,在同一页面中重复元素的id是被允许的。关于id的更多细节问题,请参考:
细说HTML元素的ID和Name属性的区别 ,一文。

那么怎么才能唯一的确定对一个元素的引用呢?使用DOM之间的引用结构来查找?这个方法虽然是行的,但是可操作性是在是太差了。这里需要说说我原来介绍过的html属性
uniqueID ,它是微软为HTML元素扩充的专有属性, 不遵循W3C的规范 。这个uniqueID有一些undocumented的特性,uniqueID其实也是和id类似的一套元素表示体系,只是它是纯客户端的标示方案。它的一些细节在前面一个链接中已经介绍了,下面我们主要说说它的特性。

由于它是元素的表示体系,那么它也因该和id的特性一样啰?实际上确实是这样,除了uniqueID的生成方式和id完全不同外,uniqueID其它表现和id是一样的。我们可以通过这个uniqueID直接引用元素,就像id一样,只是由于uniqueID是动态生成的,所以我们也只能动态使用这个uniqueID,而不能以literal形式来使用。下面是一个使用示例:
ExpandedBlockStart.gif ContractedBlock.gif var g_ELEMENTS = dot.gif {} ;
None.gif var span =
document.createElement('SPAN');
None.gif document.body.appendChild(span);
None.gif g_ELEMENTS[span.uniqueID] = span;
这样我们就通过uniqueID将span缓存起来了,已有要引用这个span,就可以这样:
None.gif var elements = g_ELEMENTS.GetExpandoKeys();
None.gif for ( var i=0 ; i < elements.length ; ++
i )
ExpandedBlockStart.gif ContractedBlock.gif dot.gif
{
InBlock.gif var element =
eval(elmenets[i]);
InBlock.gif // todo: other logic

ExpandedBlockEnd.gif
} 除了使用eval来引用这个uniqueID外,getElementById也有一个undocumented的特性,就是它也支持uniqueID,这样一来,我们就可以使用getElementById(elements[i])来绝对唯一的引用一个页面元素。

可能有人会疑惑,这个uniqueID到底有什么用啊?其实在动态生成大量页面元素时,使用uniqueID可以非常方面的为元素生成真正的unique的id,它的意义就在于可以将这些动态元素cache起来,做统一管理。特别是在实现动态在的TreeView时,如果合理使用uniqueID到来的好处,就可以避免很多需要对树进行反复递归便利才能完成的工作。还有,uniqueID是IE的DOM提供的原生解决方案,比自己去做unique标示要方面高效的多,并且还利于对元素检索。

本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

servlet前后端交互-----解决java WEB中前台传数据到后台中文乱码问题的最简单方法
servlet前后端交互-----解决java WEB中前台传数据到后台中文乱码问题的最简单方法
Web前端学习:jQuery基础--3【jquery操作样式类名、添加元素、jQuery-CSS()方法】
Web前端学习:jQuery基础--3【jquery操作样式类名、添加元素、jQuery-CSS()方法】
web前端-JavaScript中的forEach和map方法
上节我们说到遍历数组的方法,使用for循环进行遍历,其实在js中还有另外l两种方法可以将我们的数组更快的遍历出来,那就是forEach方法和map方法。下面我们一起看看如何使用吧。
Flutter设置App的应用名字和应用logo图标的方法(android ios web)
在前面的几期给大家介绍了flutter的安装以及一些简单的配置,还运行了helloword 那么接下来就带领大家了解如何设置应用名称以及图标 Flutter设置App的应用名字和应用logo图标的方法,
web渗透测试对信息收集的方法介绍
什么是web渗透测试?一般是指通过模拟黑客的攻击手法,对计算机网络系统进行安全评估测试,如果发现系统中存在漏洞,向被测试系统的所有者提交渗透报告,并提出补救措施。这一章将通过渗透测试Web应用和服务器,向大家介绍渗透测试的方法和技巧。
Python+selenium 自动化-chrome页面静止、冻结技术,获取web动态页面的Xpath方法,查看浏览器动态dom节点
Python+selenium 自动化-chrome页面静止、冻结技术,获取web动态页面的Xpath方法,查看浏览器动态dom节点
Java 技术篇 - 从指定的web网页页面中读取html内容实例演示,从http协议下的url地址中读取web页面内容方法
Java 技术篇 - 从指定的web网页页面中读取html内容实例演示,从http协议下的url地址中读取web页面内容方法