高效率的取得目前元素是父元素的第幾個子元素_javascript技巧
例如處理事件的時候,有時候需要知道目前點擊的是第幾個子節點,而HTML DOM本身並沒有直接提供對應的屬性,需要自己來計算。
從一個索引序號,很容易得到該索引對應的子節點或子元素,直接用parentNode.childNodes[index] 或 parentNode.children[index] 就行。
但反過來,已知一個節點或元素對象,要知道它的索引序號則沒有那麼直接了。
一些特殊的元素,HTML DOM有對應的屬性表示其索引序號,主要是表格的TD 和 TR 元素。
表格儲存格TD元素有 cellIndex 屬性。
表格行TR元素有rowIndex屬性。
如果你的處理目標剛好就是表格,則優先使用這兩個屬性。
但一般的節點或元素並沒有 childNodeIndex 或 childElementIndex 之類的屬性。
解決方案主要分為兩類:
一、預先計算並快取節點的索引號(可以存在節點屬性或js變數中)。
二、即時計算,需要遍歷部分節點。
應用中,可依不同的實際情況,選用上述兩類方案之一。
適用方案一的情形:
當DOM結構不會變化,並且需要頻繁的獲取個別節點的索引,可採用方案一。
優點是後續讀取快,缺點是初始化需要開銷,DOM結構變化後需要重新初始化。
適用方案二的情形:
DOM結構可能會變化,並且不是特別頻繁的獲取個別節點的索引,可採用方案二。
優點是不受DOM結構變化的影響,不會污染DOM結構,沒有初始化開銷。缺點是不適合高頻率呼叫。
一般而言,採用方案二是更好的,因為通常DOM樹規模是比較有限的,一輪的循環並不會導致顯著降低整體性能,而其優點則是顯著的。
對於IE瀏覽器,則有更直接的方法。
從IE4到IE11,都有sourceIndex屬性,這個屬性表示了元素在DOM樹的順序,比較元素和父元素的sourceIndex的差就很容易知道元素是第幾個子元素了。
我寫了一段函數來區分處理,在IE下採用sourceIndex高效判斷,非IE則採用一般遍歷。
function getChildrenIndex( is simplest and fastest
if(ele.sourceIndex){
return ele.sourceIndex - ele.parentNode.sourceIndex - 1;
}
//other browsers
var i=0 var i=0
while(ele = ele.previousElementSibling){
i ;
}
return i;
}
var i=0;
while(node){
var i=0;
while(iblevious ){
i ;
}
return i;
}
後記:在非IE下,有compareDocumentPosition 方法用於比較節點的位置關係,但經過測試該方法的效能非常差,其內部的實作機制肯定不是像IE那樣快取了資源索引號的,如果這個方法極高效,那就可採用二分法進行計算,從而提高效率,但目前還不可能。
最後的總結:
對於表格TD和TR元素優先使用cellIndex和rowIndex屬性。
對於IE優先使用sourceIndex屬性。
其它情形使用previousElementSibling 或 previousSibling 進行遍歷。
compareDocumentPosition 方法的效能非常差。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

jQuery是一個流行的JavaScript庫,用於簡化Web開發中的許多任務,包括DOM操作。在網頁開發中,經常需要對DOM元素進行增刪改查的操作,其中刪除最後一個子元素也是常見需求。本文將介紹使用jQuery刪除最後一個子元素的幾種方法。方法一:使用last()方法jQuery提供了last()方法,可以選取目前查詢結果的最後一個元素。透過結合這個方

理解事件冒泡:為什麼子元素的點擊會觸發父元素的事件?事件冒泡是指在一個嵌套的元素結構中,當子元素觸發某個事件時,該事件會像冒泡一樣逐層傳遞到父元素,直到最外層的父元素。這種機制使得子元素的事件可以在整個元素樹中傳遞,並依序觸發所有相關的元素。為了更好地理解事件冒泡,讓我們來看一個具體的範例程式碼。 HTML程式碼:<divid="parent&q

使用:nth-child(n+3)偽類選擇器選擇位置大於等於3的子元素的樣式,具體程式碼範例如下:HTML程式碼:<divid="container"><divclass="item"> ;第一個子元素</div><divclass="item"&

如何使用jQuery刪除最後一個子元素?在前端開發中,常會遇到需要對頁面元素進行增刪改查的操作。其中,刪除最後一個子元素是一個常見的需求。本文將介紹如何使用jQuery來刪除最後一個子元素,並附上具體的程式碼範例。首先,我們需要在頁面中引入jQuery庫,確保能夠使用其中的功能。在HTML檔案中加入以下程式碼:<

使用:nth-child偽類選擇器選擇特定位置的子元素的CSS樣式在CSS中,偽類選擇器是用來選擇HTML文件中特定狀態的元素。除了常見的偽類選擇器如:hover和:active,還有一個非常有用的偽類選擇器是:nth-child,它允許我們選擇特定位置的子元素。 :nth-child偽類別選擇器的語法如下:父元素:nth-child(n)其中父元素代表父級元素

如何利用jQuery判斷元素是否包含子元素在網頁開發中,常常會遇到需要判斷一個元素是否包含子元素的情況。使用jQuery可以非常方便地實現這個功能。在本文中,將介紹如何利用jQuery判斷一個元素是否包含子元素,並給出具體的程式碼範例。在jQuery中,可以使用children()方法來選擇指定元素的所有直接子元素。如果一個元素包含子元素,那麼就使用childr

jQuery是一個廣泛應用於前端開發的JavaScript庫,它提供了簡潔而強大的API,可以方便地操作DOM元素。在實際開發中,有時候我們需要判斷一個元素是否包含子元素,這時就需要使用jQuery來實作。要判斷一個元素是否存在子元素,我們可以利用jQuery提供的方法來實作。以下是一個範例程式碼,示範如何使用jQuery來判斷一個元素是否包含子元素:<

標題:jQuery實例:如何利用jQuery刪除最後一個子元素?在Web開發中,經常會遇到需要透過JavaScript操作DOM元素的情況。而jQuery作為一個廣泛使用的JavaScript函式庫,提供了許多方便的方法來操作DOM元素。本文將透過一個實例來介紹如何利用jQuery刪除最後一個子元素的方法,並提供詳細的程式碼範例。首先,我們需要在HTML檔案中引入
