这是我在这里的第一篇文章,我绝不是一个熟练的 HTML/CSS/JavaScript 程序员,所以如果我表达得不够清楚,请多多包涵——如果太罗嗦,抱歉!
我正在为表格内容使用经典的 HTML 表格,并且希望能够更改与我当前悬停的行不同的行的背景颜色。
这样做的原因是我有很多表被分成“子表”,每个表都有自己的标题和下面的一或多行。这些子表 - 都具有相同的样式 - 但是没有编码为表,而是我只是使用不同的类来设置它们的样式(这主要是因为它们太多太小,每个包含 1-6 行包括标题)。
我想要做的是,一旦你悬停任何子表,它的标题和你当前指向的行都应该改变背景颜色(后者很容易用 CSS 实现)。多亏了在网上找到的 JavaScript,我设法实现了这一点 - 请参阅可能更好地解释这一点的示例代码 ,另请参阅下面的代码 - 但是这需要每个子标题的唯一 ID。(请注意,每个子表都使用单独的 tbody - 如果将onMouseover
事件改为应用于每一行,则子标题的颜色会在从一行悬停到另一行时闪烁/继续 - 这不会发生在 CSS 中,但只有使用 JavaScript - 当然,还要创建更多代码。)
而不是必须为每个子标题分配唯一的 ID,我想要一个使用类的解决方案,因为每个子表都使用相同的子表(我当然会分配一个类tbody
)。我想这个棘手的部分可能是确保只有当前子表的标题受到影响,而不是同时受到影响。如果更容易创建一个解决方案,其中每个子表实际上都被编码为一个单独的表(从语义的角度来看这也可能更好?),那么请这样做。如果 JavaScript 自己应用 etc 事件当然更好onMouseover
,这样我就不必将它放入每个子表的内联代码中 - 我已经看到这可以用于按钮等,所以我假设这是可能的。
我从未使用过 jQuery,因此更喜欢纯 JavaScript 解决方案。
对于示例代码,请再次查看我的小提琴
非常感谢您的任何意见!
JavaScript:
function changeTo(myId) { document.getElementById(myId).className='sub-header-highlight'; }
function changeBack(myId) { document.getElementById(myId).className='sub-header'; }
CSS:
thead { color: #FFF; background: #000; }
.sub-header { color: #FFF; font-weight: bold; background: #F00; }
.sub-header-highlight { color:# FFF; font-weight: bold; background: #0F0; }
tr.sub-header:hover { background: #0F0; } /* if JS turned off */
.sub-row1 { color: #000; background: #FFF; }
.sub-row2 { color: #000; background: #EEE; }
tr.sub-row1:hover, .sub-row2:hover { background: #FF0; }
HTML 的一部分:
<tbody onMouseover="changeTo('sub1');" onMouseout="changeBack('sub1');">
<tr class="sub-header" id="sub1">
<td>Sub-Header 1</td>
</tr>
<tr class="sub-row1">
<td>Contents of row 1</td>
</tr>
<tr class="sub-row2">
<td>Contents of row 2</td>
</tr>
<tr class="sub-row1">
<td>Contents of row 3</td>
</tr>
</tbody>