javascript - HTML Table Row nth-child 动态内容问题

标签 javascript html css webpage

我有一张 table <tr> s 我通过手动更改表的 innerHTML 即时填充.当我这样做时,我现有的 CSS(实现 nth-child(odd/even))失败了。

tr:nth-child(odd) {
    background-color: #000000;
}

tr:nth-child(even) {
    background-color: #FFFFFF;
}

结果表包含所有 <tr> s 与 nth-child(odd) 的配色方案选择器。

当表动态填充 tableVar.innerHTML += "<tr>...</tr>" 时问题出现了,但是,如果你改变 innerHTML 的方式通过首先用 stringVar += "<tr>...</tr>" 组装一个字符串来修改然后将 innerHTML 分配给带有 tableVar.innerHTML = stringVar 的字符串问题消失了,预期的行为又回来了。

为什么会这样?

最佳答案

浏览器将您的新行包装在 <tbody> 中将新行直接连接到表元素时的元素,因此每个后续行都是每个新行的单个行 <tbody> , 使其适用于 nth-child(odd)选择器。这解释了为什么从头开始构建新的 HTML 并将其分配给表格不会显示该问题。您可以通过检查运行此示例时在浏览器的开发人员控制台中生成的 HTML 来了解这一点:

var table = document.getElementById("table");
setInterval(function() {
  table.innerHTML += "<tr><td>Test1</td><td>Test 2</td></tr>";
}, 1000)
tr:nth-child(odd) {
  background-color: #cccccc;
}
tr:nth-child(even) {
  background-color: #FFFFFF;
}
<table id="table">
  <tbody id="tbody">
    <tr>
      <td>Test 1</td>
      <td>Test 2</td>
    </tr>
    <tr>
      <td>Test 1</td>
      <td>Test 2</td>
    </tr>
    <tr>
      <td>Test 1</td>
      <td>Test 2</td>
    </tr>
  </tbody>
</table>

如果您直接附加到表的 <tbody>元素,您会看到 CSS 按预期应用于您的新行:

var tbody = document.getElementById("tbody");
setInterval(function() {
  tbody.innerHTML += "<tr><td>Test1</td><td>Test 2</td></tr>";
}, 1000)
tr:nth-child(odd) {
  background-color: #cccccc;
}
tr:nth-child(even) {
  background-color: #FFFFFF;
}
<table id="table">
  <tbody id="tbody">
    <tr>
      <td>Test 1</td>
      <td>Test 2</td>
    </tr>
    <tr>
      <td>Test 1</td>
      <td>Test 2</td>
    </tr>
    <tr>
      <td>Test 1</td>
      <td>Test 2</td>
    </tr>
  </tbody>
</table>

关于javascript - HTML Table Row nth-child 动态内容问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39172548/

相关文章:

html - 如何使页脚对齐

javascript - 停止绝对定位的 div 以在相对父级内移动

jquery - 处理 Twitter Bootstrap 下拉列表在容器上自动溢出的问题

Javascript - 查找字谜的更好解决方案 - 时间复杂度 O (n log n)

javascript - 如何使用 JQuery 使具有特定 URL 的选项卡处于事件状态

javascript - TinyMCE自定义工具栏menuItem点击触发所有父项的点击事件

html - 想要在元素之前使用类名

Javascript 导入/导出 CORS 问题

php - 如何使用 WAMP 使应用程序在另一台计算机上看起来相同

jquery - 在 iFrame 中隐藏滚动条