假设我有一个名为Z div
Z .
div that is a sub-sub-sub... child of a
B called
div which is a child of a
A`的called
。
从B
到Z
的所有块均设置为display=none
(A
可见)。
如果单击链接到块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/