为什么我们使用根节点。在下面给出的函数中,它们使用根节点函数。我想理解这个函数也是'!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;
}
答案 0 :(得分:1)
rootNode
是您要查找从中开始的元素的顶级节点。 document
会查看整个文档。 document.body
只会出现在文档正文中。身体中的其他一些元素只会出现在该元素的子元素中。
声明:
if (!rootNode) {
正在检查您是否为该参数传递了任何内容,如果您没有传递或传递undefined
或null
或任何其他虚假值,则它将默认为文档作为根节点。这允许人们使用如下函数:
var items = getElementsByClassName("foo");
,该功能将查看整个文档。
答案 1 :(得分:1)
在您的示例中,rootNode
是HTML元素,从该元素开始以类名{{1}的元素递归搜索分层DOM树(这是网页在JavaScript中的表示方式) }}
这允许函数的调用者指定他们想要搜索类名为cn
的元素的位置。如果调用者未指定cn
,则该函数仅返回整个网页中具有类名rootNode
的每个元素。
数组cn
初始化为一个空数组,其中添加了找到的元素(使用r=[]
)。
push
是因为i--
循环从for
开始 - 该函数遍历由i=e.length
从数组末尾返回到开始的元素。 getElementsByTagName
循环将for
的结果作为布尔值计算,当i--
命中i
时退出(因为在此迭代中,布尔评估将针对该值进行{{1} 1}},因为-1
post-decrements 0
}的值。
答案 2 :(得分:1)
如果您不将rootNode作为参数,则将搜索整个文档。否则,将搜索来自给定根节点的所有降序节点。