2012-08-03 113 views
1

爲什麼我們使用根節點。在下面給出的函數中,它們使用根節點函數。我想了解這個函數也是'!rootNode'的含義。什麼是javascript中的根節點

function getElementsByClassName(cn, rootNode) { 
    if (!rootNode) { 
    rootNode = document; 
    } 
    for (var r=[], e=rootNode.getElementsByTagName('*'), i=e.length; i--;) { 
    if ((' '+e[i].className+' ').indexOf(' '+cn+' ')>-1) { 
     r.push(e[i]); 
    } 
    } 
    return r; 
} 

回答

1

在你的榜樣,rootNode是HTML元素從開始遞歸搜索層次DOM樹(這是怎麼網頁在JavaScript中表示)使用類名稱cn元素。

這允許你的函數的調用者從他們想要搜索類名爲cn的元素的位置指定。如果調用者沒有指定rootNode,則該函數僅返回整個網頁中類名爲cn的每個元素。

數組r=[]被初始化爲一個空數組,其中找到的元素被添加到其中(使用push)。

i--被使用,因爲for循環開始於i=e.length - 功能經過由getElementsByTagName通過到開始從陣列的端部返回的元素。該for循環計算的i--結果作爲一個布爾值,exitting當i命中-1(因爲本次迭代布爾評估將已經對falue 0完成,因爲i--post-decrementsi值)。

+0

該功能還有一件事爲什麼我們使用空白數組和我 - 爲什麼不是我++ – Carlos 2012-08-03 07:56:34

+0

最後一件事要知道爲什麼我 - 爲什麼不是我++ – Carlos 2012-08-03 07:59:13

+0

感謝現在很清楚 – Carlos 2012-08-03 08:04:03

1

rootNode該函數是您要查找元素的頂級節點。 document將在整個文檔中查找。 document.body只會在文檔的主體中顯示。身體中的其他元素只會在該元素的子元素中看到。

聲明:

if (!rootNode) { 

正在檢查,看看是否通過該參數任何東西,如果你沒有,或者傳遞undefinednull或任何其他falsey值,則默認爲文件作爲根節點。這允許使用如下功能:

var items = getElementsByClassName("foo"); 

並且該函數將在整個文檔中查找。

+0

感謝解釋,還有一兩件事,爲什麼我們使用這個功能的空白陣列和我 - 爲什麼不我++ – Carlos 2012-08-03 07:57:22

+0

空白陣列'R = []'只是初始化,其中結果將要積累的陣列。我不知道爲什麼循環會向後迭代,因爲這會導致以向後的文檔順序返回結果。它也會讓我錯誤地錯過getElementsByTagName()'返回的第一個項目。 – jfriend00 2012-08-03 08:04:19

1

如果你沒有給rootNode作爲參數,整個文檔將被搜索。否則,將搜索來自給定根節點的所有降序節點。