2012-08-03 31 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作为参数,整个文档将被搜索。否则,将搜索来自给定根节点的所有降序节点。