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

2021-04-09 09:18:40 字數 1523 閱讀 1496

我們知道要在web頁面中引用乙個html元素,最簡單的方法就是使用getelementbyid方法,或其類似的一組getelementsby***方法。可是這裡需要注意的是,這些方法其實都不能完全絕對的唯一確定對乙個元素的引用。

至於getelementsby***我們不說了,它本身就是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形式來使用。下面是乙個使用示例:

varg_elements ={}

;var

span ==

span;

這樣我們就通過uniqueid將span快取起來了,已有要引用這個span,就可以這樣:

varelements 

= g_elements.getexpandokeys();

for( 

vari=0

; i 

<

elements.length ; 

++ i )

除了使用eval來引用這個uniqueid外,getelementbyid也有乙個undocumented的特性,就是它也支援uniqueid,這樣一來,我們就可以使用getelementbyid(elements[i])來絕對唯一的引用乙個頁面元素。

可能有人會疑惑,這個uniqueid到底有什麼用啊?其實在動態生成大量頁面元素時,使用uniqueid可以非常方面的為元素生成真正的unique的id,它的意義就在於可以將這些動態元素cache起來,做統一管理。特別是在實現動態在的treeview時,如果合理使用uniqueid到來的好處,就可以避免很多需要對樹進行反覆遞迴便利才能完成的工作。還有,uniqueid是ie的dom提供的原生解決方案,比自己去做unique標示要方面高效的多,並且還利於對元素檢索。

參考資訊:

getexpandokeys

(),另外就是本文不適合firefox及其它非ie核心瀏覽器。

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

我們知道要在web頁面中引用乙個html元素,最簡單的方法就是使用getelementbyid方法,或其類似的一組getelementsby 方法。可是這裡需要注意的是,這些方法其實都不能完全絕對的唯一確定對乙個元素的引用。至於getelementsby 我們不說了,它本身就是getelements...

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

我們知道要在web頁面中引用乙個html元素,最簡單的方法就是使用getelementbyid方法,或其類似的一組getelementsby 方法。可是這裡需要注意的是,這些方法其實都不能完全絕對的唯一確定對乙個元素的引用。至於getelementsby 我們不說了,它本身就是getelements...

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

我們知道要在web頁面中引用乙個html元素,最簡單的方法就是使用getelementbyid方法,或其類似的一組getelementsby 方法。可是這裡需要注意的是,這些方法其實都不能完全絕對的唯一確定對乙個元素的引用。至於getelementsby 我們不說了,它本身就是getelements...