gpt4 book ai didi

javascript - 嵌套的 HTML 表格显示不正确

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:41 24 4
gpt4 key购买 nike

我正在尝试在 HTML 表格中创建数据的父行和子行。目前代码有效,但由于我不熟悉 JavaScript,我并不总是选择正确的元素。在提供的代码中,单击第一个父项仅显示一个子项而不显示两个子项,单击第二个父项仅显示第一个父项的第一个子项。

我 90% 确定错误出在 JavaScript 中。

var toggler = document.getElementsByClassName("parent");
var i;
for (i = 0; i < toggler.length; i++) {
toggler[i].addEventListener("click", function() {
this.parentElement.querySelector(".child").classList.toggle("active");
this.classList.toggle("parent-down");
this.parentElement.querySelector(".arrow").classList.toggle("arrow-down ");
});
}
.parent {
cursor: pointer;
user-select: none;
/* Prevent text selection */
font-size: 16px;
}

.arrow-down::before {
-ms-transform: rotate(90deg);
/* IE 9 */
-webkit-transform: rotate(90deg);
/* Safari */
'
transform: rotate(90deg);
}

.parent-down {
border: 2px solid rgb(21, 67, 96);
font-weight: bold;
}


/* Hide the child list */

.child {
display: none;
background-color: rgb(240, 250, 255);
font-size: 14px;
}

.active {
display: table-row;
}

.arrow::before {
content: "\25B6";
color: black;
display: inline-block;
margin-right: 6px;
}
<table>
<tr>
<th>Word</th>
<th>Number of Letters</th>
<th>Do I like the word?</th>
</tr>
<tr class="parent">
<td class="arrow">Long Words</td>
<td>-</td>
<td>-</td>
</tr>
<tr class="child">
<td>Bamboozle</td>
<td>9</td>
<td>Yes.</td>
</tr>
<tr class="child">
<td>Peritoneum</td>
<td>10</td>
<td>No.</td>
</tr>
<tr class="parent">
<td class="arrow">Short Words</td>
<td>-</td>
<td>-</td>
</tr>
<tr class="child">
<td>Squeak</td>
<td>6</td>
<td>Yes.</td>
</tr>
</table>

最佳答案

这有点难,因为您的 html 结构对此并不理想。但是,您可以使用 nextElementSibling 属性并将其放入 while 循环中以查找所需的所有元素。您可能想为 while 循环编写一个紧急导出,以防出现问题。如果我们已经得到最后一个元素,是否检查下一个兄弟是否不为空。

还删除了类切换中的空格,因为这是不允许的。

但是我建议更改您的 html 结构并将折叠按钮移到表格之外。表格最适合表格数据,而不是按钮和其他布局功能。对于像盲人一样使用面向文本的浏览器的人来说,这会很烦人。不过,数据一词可以很好地放入表格中。

有了更好的元素结构,选择属于正确父元素的元素也会变得更容易,因此您不需要在 while 循环中做一些狡猾的事情。

var toggler = document.getElementsByClassName("parent");
var i;
for (i = 0; i < toggler.length; i++) {
toggler[i].addEventListener("click", function() {
var nextSibling = this.nextElementSibling;
while(nextSibling !== null && nextSibling.classList.contains("child")) {
nextSibling.classList.toggle("active");
nextSibling = nextSibling.nextElementSibling;
}
this.classList.toggle("parent-down");
this.querySelector(".arrow").classList.toggle("arrow-down");
});
}
.parent {
cursor: pointer;
user-select: none;
/* Prevent text selection */
font-size: 16px;
}

.arrow-down::before {
-ms-transform: rotate(90deg);
/* IE 9 */
-webkit-transform: rotate(90deg);
/* Safari */
'
transform: rotate(90deg);
}

.parent-down {
border: 2px solid rgb(21, 67, 96);
font-weight: bold;
}


/* Hide the child list */

.child {
display: none;
background-color: rgb(240, 250, 255);
font-size: 14px;
}

.active {
display: table-row;
}

.arrow::before {
content: "\25B6";
color: black;
display: inline-block;
margin-right: 6px;
}
<table>
<tr>
<th>Word</th>
<th>Number of Letters</th>
<th>Do I like the word?</th>
</tr>
<tr class="parent">
<td class="arrow">Long Words</td>
<td>-</td>
<td>-</td>
</tr>
<tr class="child">
<td>Bamboozle</td>
<td>9</td>
<td>Yes.</td>
</tr>
<tr class="child">
<td>Peritoneum</td>
<td>10</td>
<td>No.</td>
</tr>
<tr class="parent">
<td class="arrow">Short Words</td>
<td>-</td>
<td>-</td>
</tr>
<tr class="child">
<td>Squeak</td>
<td>6</td>
<td>Yes.</td>
</tr>
</table>

关于javascript - 嵌套的 HTML 表格显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56493868/

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