假设我有一个名为Z div Z . div that is a sub-sub-sub... child of a B called div which is a child of a A`的called

BZ的所有块均设置为display=noneA可见)。

如果单击链接到块Z的锚点,则希望显示它。

为此,我需要设置块Z block的显示,还需要设置其父级的显示*来阻止,并且将其父级一直设置到块B。

我不想对所有可能的级别进行“硬”编码,因为我可能有2、4或10个级别。因此,我想找到一种自动执行此操作的方法。

我简化了上面的示例,因为我必须每2个“世代”设置一次display=block(请参见我的代码中的parentNode.parentNode

到目前为止,这是我的代码(在兔子洞下面有2级!),而不是自动化:

function indexLink(link_to_anchor) {
    var x = document.getElementById(link_to_anchor);
    if (x.parentNode.parentNode.getAttribute("class") == "divcodebox") {
        if (x.parentNode.parentNode.parentNode.parentNode.getAttribute("class") == "divcodebox") {
            x.parentNode.parentNode.parentNode.parentNode.style.display = "block";
        }
        x.parentNode.parentNode.style.display = "block";
    }
    x.style.display = "block";
}




递归使用indexLink():

function indexLink(link_to_anchor) {
    var x = document.getElementById(link_to_anchor);
    x.style.display = "block";
    if (x.parentNode.parentNode.getAttribute("class") == "divcodebox") {
        x.parentNode.parentNode.style.display = "block";
        indexLink(x)
    }
}

最佳答案

一个简单的for循环怎么样?

    var x = document.getElementById(link_to_anchor);
    for (parent = x.parentNode; parent; parent = parent.parentNode) {
      // do whatever
    }


您当然可以保留一个计数器,以检查您遍历了多少步,等等。.parentNode级别的document引用将为null,从而结束迭代。 (您也可以提前退出循环。)

关于javascript - JS:如何根据需要自动执行“parentNode”上移次数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56042516/

10-12 16:06