对Web页面元素的绝对唯一引用方法

web|页面

    我们知道要在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形式来使用。下面是一个使用示例:
var g_ELEMENTS = {};
var span = document.createElement('SPAN');
document.body.appendChild(span);
g_ELEMENTS[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到底有什么用啊?其实在动态生成大量页面元素时,使用uniqueID可以非常方面的为元素生成真正的unique的id,它的意义就在于可以将这些动态元素cache起来,做统一管理。特别是在实现动态在的TreeView时,如果合理使用uniqueID到来的好处,就可以避免很多需要对树进行反复递归便利才能完成的工作。还有,uniqueID是IE的DOM提供的原生解决方案,比自己去做unique标示要方面高效的多,并且还利于对元素检索。

    参考信息:GetExpandoKeys(),另外就是本文不适合FireFox及其它非IE内核浏览器。

时间: 2024-09-17 04:50:17

对Web页面元素的绝对唯一引用方法的相关文章

巧妙实现隐藏不想打印的web页面元素

web|打印|页面 <HTML><HEAD><TITLE>web打印去掉页眉页脚,以及不想打印出的页面元素</TITLE><META http-equiv=Content-Type content="text/html; charset=gb2312"><SCRIPT language=javascript>function printpr()   //预览函数{document.all("qingkon

asp.net web页面元素的多语言化(多国语化)实现分享_实用技巧

开发的一些系统,经常要求支持多语言(例如日文,英文等),以前大部分做法是创建一个资源文件, 将每一个标签,按钮等标题文字预先用各种语言设定保存好, 在程序中根据选择的语言来显示对应文字. 这样做的缺点是如果每次改动或增加一个控件,都需要程序开发人员刻意做多语言对应, 如果用户想要改某些标题的描述,还需要开发人员改动资源文件并替换到程序发布目录. 经过调查实验,最终想了一个办法来较好地对应此问题: 在每一个web页面,设定一个只有最高级的管理权限才能看到的一个按钮(例如叫"设定"), 来

C#中生成中文繁体web页面

web|页面|中文 C#中生成中文繁体web页面 1 在工程中引用Microsoft.VisualBasic.dll 一般此文件在.net框架环境目录中如C:\ WINNT \Microsoft.NET \Framework \v1.1.4322 \Microsoft.VisualBasic.dll. 2 使用方法 Microsoft.VisualBasic.Strings.StrConv( "instr",Microsoft.VisualBasic.VbStrConv.Traditi

C#中实现简体,繁体web页面

web|页面 1 在工程中引用Microsoft.VisualBasic.dll        一般此文件在.net框架环境目录中如C:\ WINNT \Microsoft.NET \Framework \v1.1.4322 \Microsoft.VisualBasic.dll.   2 使用方法        Microsoft.VisualBasic.Strings.StrConv( "instr",Microsoft.VisualBasic.VbStrConv.Tradition

用动态元素自动更新Web页面

您可能知道如何在标准 JSF 组件内使用 JavaScript 和 Cascading Style Sheets (CSS) 来隐藏和显示可选的 JavaServer Faces (JSF) 组件.为了实现 这个目的,您需要首先识别所有的 JSF 组件并将它们写入到 JSF 页面.但是, 如果开发的是包含动态元素的 Web 页面并且这些动态元素直到运行时才知道, 那么就不可能这么做.在本文中,了解如何在自动更新 Web 页面的动态元素的 同时,清除旧的 UI 元素,以及如何使用 Java 代码来

用PHP实现自动把纯文本转换成Web页面

最近,我的一个老朋友向我打电话求助.他从事记者的职业有多年了,最近获得了重新出版他的很多早期专栏的权利.他希望把他的作品贴在Web上;但是他的专栏都是以纯文本文件的形式保存的,而且他既没有时间也不想去为了把它们转换成为Web页面而学习HTML的知识.由于我是他电话本里唯一一个精通计算机的人,所以他打电话给我看我是否能够帮帮他. "让我来处理吧,"我说:"一个小时以后再给我打电话."当然了,当他几个小时以后打电话过来,我已经为他准备好了解决的方法.这需要用到一点点PH

用PHP自动把纯文本转换成Web页面

  最近,我的一个老朋友向我打电话求助.他从事记者的职业有多年了,最近获得了重新出版他的很多早期专栏的权利.他希望把他的作品贴在Web上;但是他的专栏都是以纯文本文件的形式保存的,而且他既没有时间也不想去为了把它们转换成为Web页面而学习HTML的知识.由于我是他电话本里唯一一个精通计算机的人,所以他打电话给我看我是否能够帮帮他. "让我来处理吧,"我说:"一个小时以后再给我打电话."当然了,当他几个小时以后打电话过来,我已经为他准备好了解决的方法.这需要用到一点点

用定制标签库和配置文件实现对JSP页面元素的访问控制

js|访问|控制|页面        控制客户端访问是开发一个基于B/S的架构的系统的开发者必须考虑的问题.JSP或SERVLET规范的基于配置文件的安全策略对资源的控制是以文件为单位的,即只可以定义某个视图全部可以或全部不能被访问.一个比较复杂的系统往往要要求对视图的一部分(如JSP页面里的一个按钮)提供访问控制,只允许被某种角色的用户访问.如果采用可编程的安全策略,因为对用户角色和操作的定义在开发时不能定义,而且这种策略加大了程序员的工作量,它可能不是一种好的办法.        我采用定制

一个Web页面的问题分析

几个月之前我接到一个新的开发任务,要在一个旧的Web页面上面增添一些新的功能.在开发的过程中发现旧的代码中有很多常见的不合适的写法,结合这些问题,如何写出更好的,更规范的,更可维护的代码,就是这篇文章要阐述的内容. 首先我查看了该Web页面的HTML代码,发现了一些典型的问题: HTML页面中包含了很多Javascript和CSS代码 HTML页面中引用了大量的外部Javascript文件和CSS文件 接下来就这些问题,我们逐个讨论一下: HTML页面中包含了很多Javascript和CSS代码