国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

對Web頁面元素的絕對唯一引用方法

2024-04-27 13:56:00
字體:
供稿:網(wǎng)友

    我們知道要在Web頁面中引用一個HTML元素,最簡單的方法就是使用getElementById方法,或其類似的一組getElementsByXxx方法??墒沁@里需要注意的是,這些方法其實都不能完全絕對的唯一確定對一個元素的引用。

    至于getElementsByXxx我們不說了,它本身就是getElements,很明白了,那么getElementById也不能唯一確定一個元素嗎?當(dāng)然是,不能。由于html的不嚴格性,在同一頁面中重復(fù)元素的id是被允許的。關(guān)于id的更多細節(jié)問題,請參考:細說HTML元素的ID和Name屬性的區(qū)別,一文。

    那么怎么才能唯一的確定對一個元素的引用呢?使用DOM之間的引用結(jié)構(gòu)來查找?這個方法雖然是行的,但是可操作性是在是太差了。這里需要說說我原來介紹過的html屬性uniqueID,它是微軟為HTML元素擴充的專有屬性,不遵循W3C的規(guī)范。這個uniqueID有一些undocumented的特性,uniqueID其實也是和id類似的一套元素表示體系,只是它是純客戶端的標示方案。它的一些細節(jié)在前面一個鏈接中已經(jīng)介紹了,下面我們主要說說它的特性。

    由于它是元素的表示體系,那么它也因該和id的特性一樣啰?實際上確實是這樣,除了uniqueID的生成方式和id完全不同外,uniqueID其它表現(xiàn)和id是一樣的。我們可以通過這個uniqueID直接引用元素,就像id一樣,只是由于uniqueID是動態(tài)生成的,所以我們也只能動態(tài)使用這個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到底有什么用?。科鋵嵲趧討B(tài)生成大量頁面元素時,使用uniqueID可以非常方面的為元素生成真正的unique的id,它的意義就在于可以將這些動態(tài)元素cache起來,做統(tǒng)一管理。特別是在實現(xiàn)動態(tài)在的TreeView時,如果合理使用uniqueID到來的好處,就可以避免很多需要對樹進行反復(fù)遞歸便利才能完成的工作。還有,uniqueID是IE的DOM提供的原生解決方案,比自己去做unique標示要方面高效的多,并且還利于對元素檢索。

    參考信息:GetExpandoKeys(),另外就是本文不適合Firefox及其它非IE內(nèi)核瀏覽器。
http://www.cnblogs.com/birdshome/archive/2006/09/28/uniqueid_usage.html


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 含山县| 海门市| 柯坪县| 北宁市| 封开县| 随州市| 庆安县| 特克斯县| 集安市| 龙川县| 达日县| 于田县| 洛川县| 龙陵县| 乌什县| 清镇市| 丽水市| 靖宇县| 凉城县| 九龙县| 平和县| 呼图壁县| 东莞市| 酒泉市| 明光市| 疏勒县| 黄陵县| 六枝特区| 黄浦区| 县级市| 富裕县| 南阳市| 南丰县| 磐安县| 卓资县| 太白县| 安新县| 福贡县| 精河县| 鹤岗市| 阜新|