2

为什么我们使用根节点。在下面给定的函数中,他们使用根节点函数。我也想了解这个函数'!rootNode'是什么意思。

 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;  
}
4

3 回答 3

2

在您的示例中,rootNode是 HTML 元素,从该元素开始递归搜索分层DOM树(这是网页在 JavaScript 中的表示方式)以查找具有 class name 的元素cn

这允许您的函数的调用者指定他们要从哪里搜索具有类 name 的元素cn。如果调用者没有指定rootNode该函数,则只返回整个网页中的每个元素的类名cn

该数组r=[]被初始化为一个空数组,找到的元素被添加到该数组中(使用push)。

i--之所以使用循环,是因为for循环开始于- 函数遍历从数组末尾到开头i=e.length返回的元素。getElementsByTagName循环将for结果评估i--为布尔值,当i命中时退出-1(因为在此迭代中,布尔评估将针对 falue 进行0,因为i-- 后递减的值i)。

于 2012-08-03T07:51:08.737 回答
1

rootNode在该函数中是您要从中查找元素的顶级节点。 document将查看整个文档。 document.body只会查看文档的正文。正文中的其他一些元素只会在该元素的子元素中查找。

该声明:

if (!rootNode) {

正在检查您是否为该参数传递了任何内容,如果您没有传递或传递或传递undefined任何null其他虚假值,则默认将文档作为根节点。这允许人们使用如下功能:

var items = getElementsByClassName("foo");

并且该功能将查看整个文档。

于 2012-08-03T07:50:43.793 回答
1

如果您不提供 rootNode 作为参数,则将搜索整个文档。否则将搜索给定根节点的所有下降节点。

于 2012-08-03T07:51:43.310 回答