while循环在父函数JavaScript中

时间:2013-01-08 03:33:42

标签: javascript

我无法解释此代码的作用。这是:

function parent(e, n) { 

    if (n === undefined) n = 1; //if n is not defined, use 1 by default

    while(n-- && e) e = e.parentNode; 

    if (!e || e.nodeType !== 1) return null; 

    return e;   

}

此函数接受两个参数。一个用于元素,第二个用于元素的祖先。因此,在第二个参数中传递2将检索元素的祖父(DOM树上的2个元素)。

除了while循环外,我了解所有内容。我不确定向后计数是如何选择特定的祖先。这个while循环如何使这个函数选择一个祖先?

4 个答案:

答案 0 :(得分:2)

这里重要的是数字是“真实的”(或虚假的)。 0false的行为相同。因此,当n达到零时,循环结束。

因此,如果n从2开始,则循环将最多运行2次。

另一个条件稍微容易理解。如果节点没有父节点,则循环也将终止。

循环的每次迭代都会e = e.parentNode,它将获得“当前”节点的父节点。如果循环执行2次迭代,那么将在dom(“祖父母”)上移动2层。

答案 1 :(得分:0)

看起来它得到了第n个父元素......

答案 2 :(得分:0)

循环的每次迭代都会查看传入元素的parentNode。因此,如果传入一个特定的div作为迭代因子,它将查看div的直接父级。如果你传入2,它将看起来2个父母(div的父母的父母)。它通过使用e.parentNode并在循环的每次迭代中将e重置为其父级来完成此操作。

答案 3 :(得分:0)

试试这个:

var n = 2;
while(n--) console.log("do this " + n + " more times.");

if(0){
  console.log("never executed because zero is evaluated as false");
}

在支持console.log的浏览器中。

在说明数字0被评估为假之前已经给出了答案。

n--表示返回n的值,然后减去1。如果您在上面的代码中使用--n,那么它只会执行一次(先减去)。

在你的代码中,如果n为2,循环将执行2次,在循环变量e(元素)设置为元素的父节点。如果没有父节点,那么e将是未定义的,在这种情况下,语句if(e){...}将不会执行任何操作,因为评估未定义的值会导致false。所以n&&当e未定义时(如没有父节点),即使n不为0,e也会返回false。