gpt4 book ai didi

javascript - 在javascript中折叠和展开列表

转载 作者:可可西里 更新时间:2023-11-01 13:14:22 27 4
gpt4 key购买 nike

我正在使用教程在 HTML 中制作可折叠列表。

我的 HTML 看起来像这样:

<li>
<a href="#" onclick="test('node1')">hello</a>
<ul id="node3" style="display:none">
<li>Sub-item 1</li>
<li>Sub-item 2</li>
</ul>
</li>
<li>
<a href="#" onclick="test('node2')">test</a>
<ul id="node3" style="display:none">
<li>Sub-item 1</li>
<li>Sub-item 2</li>
</ul>
</li>

节点 3、4、5 等

我正在尝试使用以下 JavaScript 折叠所有这些表格:

function test2(id, link) {
var e = document.getElementById(id);
if (e.style.display == '') {
e.style.display = 'none';
link.innerHTML = 'Expand';
} else {
e.style.display = '';
link.innerHTML = 'Collapse';
}
}

但是当我调用该函数时,我不太确定输入什么来选择所有节点。我仍然需要对每个节点进行单独控制,所以我无法将所有名称更改为相同。

<a href="#" onclick="test2('node????', this)">Collapse</a>

最佳答案

你可以为此使用类属性。

<li>
<a href="#" onclick="test('node1')">hello</a>
<ul id="node1" class="node" style="display:none">
<li>Sub-item 1</li>
<li>Sub-item 2</li>
</ul>
</li>
<li>
<a href="#" onclick="test('node2')">test</a>
<ul id="node2" class="node" style="display:none">
<li>Sub-item 1</li>
<li>Sub-item 2</li>
</ul>
</li>

假设你真的想折叠所有这些而不切换它们的可见性你可以写这样的东西......

function test2(className, link) {
var e = document.getElementsByClassName(className);

for (var i = 0, len = e.length; i < len; i++) {
e[i].style.display = "none";
}

link.innerHTML = "Expand";
}

...然后这样调用它...

<a href="#" onclick="test2('node', this)">Collapse</a>

请记住,getElementsByClassName 在旧版浏览器 (< IE9) 中不起作用。

更新:实现此目的的另一种方法是使用 CSS 并更改共同父元素的类名。这是一个示例 CSS 代码:

#mutualParent.hide-nodes li.node {
display: none;
}

然后像这样改变你的功能......

function test2(className) {
document.getElementById("mutualParent").className += className;
}

...然后这样调用它:

<a href="#" onclick="test2('hide-nodes')">Collapse</a>

如果您想使用 test() 函数切换可见性,您需要先删除类名,否则它会保持隐藏状态。此外,为了使此代码正常工作,您需要从 <ul> 中删除样式属性标签,因为样式属性具有更高的优先级。

关于javascript - 在javascript中折叠和展开列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259112/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com