使用 Javascript 设置备用行的样式 [重复]

Posted

技术标签:

【中文标题】使用 Javascript 设置备用行的样式 [重复]【英文标题】:Styling alternate rows using Javascript [duplicate] 【发布时间】:2018-10-26 03:13:07 【问题描述】:

我正在尝试使用 javascript 更改两个表格的交替行的背景颜色。

我可以使用下面的 javascript 来做到这一点,但我确信有一种更有效或更快捷的方式来使用 CSS 选择器选择所需的子元素。有人可以帮忙吗?

window.onload = function() 
  var elem = document.getElementsByTagName('table')
  for (let c = 0; c < elem.length; c++) 
    var childElem = elem[c].getElementsByTagName('tr');
    for (let d = 0; d < childElem.length; d = d + 2) 
      childElem[d].classList.add('alt');
    
  
tr 
  background-color: #fff;


.alt 
  background-color: #ccc;
<html>

<body>
  <h2>Online Tx</h2>
  <table>
    <tr>
      <td>As You Like It</td>
      <td>Comedy</td>
      <td></td>
    </tr>
    <tr>
      <td>All's Well that Ends Well</td>
      <td>Comedy</td>
      <td>1601</td>
    </tr>
    <tr>
      <td>Hamlet</td>
      <td>Tragedy</td>
      <td>1604</td>
    </tr>
    <tr>
      <td>Macbeth</td>
      <td>Tragedy</td>
      <td>1606</td>
    </tr>
    <tr>
      <td>Romeo and Juliet</td>
      <td>Tragedy</td>
      <td>1595</td>
    </tr>
  </table>
  <h2>Backend tx</h2>
  <table>
    <tr>
      <td>The Fair Youth</td>
      <td>1–126</td>
    </tr>
    <tr>
      <td>The Dark Lady</td>
      <td>127–152</td>
    </tr>
    <tr>
      <td>The Rival Poet</td>
      <td>78–86</td>
    </tr>
  </table>

</body>

</html>

【问题讨论】:

:nth-child(odd/even) ? 【参考方案1】:

你可以用纯CSS和:nth-child实现它:

tr:nth-child(2n) 
  background-color: #eee;


tr:nth-child(2n + 1) 
  background-color: #ccc;
<h2>Online Tx</h2>
<table>
  <tr>
    <td>As You Like It</td>
    <td>Comedy</td>
    <td></td>
  </tr>
  <tr>
    <td>All's Well that Ends Well</td>
    <td>Comedy</td>
    <td>1601</td>
  </tr>
  <tr>
    <td>Hamlet</td>
    <td>Tragedy</td>
    <td>1604</td>
  </tr>
  <tr>
    <td>Macbeth</td>
    <td>Tragedy</td>
    <td>1606</td>
  </tr>
  <tr>
    <td>Romeo and Juliet</td>
    <td>Tragedy</td>
    <td>1595</td>
  </tr>
</table>
<h2>Backend tx</h2>
<table>
  <tr>
    <td>The Fair Youth</td>
    <td>1–126</td>
  </tr>
  <tr>
    <td>The Dark Lady</td>
    <td>127–152</td>
  </tr>
  <tr>
    <td>The Rival Poet</td>
    <td>78–86</td>
  </tr>
</table>

【讨论】:

这个比用JS好【参考方案2】:

在 CSS 中,只需使用:

tr:nth-of-type(odd)

工作示例:

tr:nth-of-type(odd) 
background-color: rgb(191, 191, 191);
  <table>
    <tr>
      <td>As You Like It</td>
      <td>Comedy</td>
      <td></td>
    </tr>
    <tr>
      <td>All's Well that Ends Well</td>
      <td>Comedy</td>
      <td>1601</td>
    </tr>
    <tr>
      <td>Hamlet</td>
      <td>Tragedy</td>
      <td>1604</td>
    </tr>
    <tr>
      <td>Macbeth</td>
      <td>Tragedy</td>
      <td>1606</td>
    </tr>
    <tr>
      <td>Romeo and Juliet</td>
      <td>Tragedy</td>
      <td>1595</td>
    </tr>
  </table>

【讨论】:

'tr:nth-of-type(odd)' & 'tr:nth-child(odd)' 工作正常,有什么区别? 子元素是any子元素。一个类型only 是那个元素类型。这可能导致不同的结果。如果您(例如):&lt;div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt; 并声明p:nth-child(odd),它将选择第一段和最后一段。而如果您声明p:nth-of-type(odd),它将选择第一段和第三段。出于偏好,我总是使用:nth-of-type,除非我很清楚我想要:nth-child

以上是关于使用 Javascript 设置备用行的样式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

触发/设置数据网格中特定行的样式

在 Handsontable 中有条件地设置嵌套行的样式

如何设置与选定行相邻的 TableView 行的样式?

Dojo Datagrid - 以编程方式设置选定行的样式

常用样式

设置报表合计行的样式