これは私の最初の投稿であり、私は熟練した HTML/CSS/JavaScript プログラマーではないので、十分に明確に表現していない場合はご容赦ください。言葉が多すぎたら申し訳ありません!
表形式のコンテンツに従来の HTML テーブルを使用していますが、現在ホバリングしている行とは異なる行の背景色を変更できるようにしたいと考えています。
この理由は、「サブテーブル」に分割された多くのテーブルがあり、それぞれに独自のヘッダーがあり、その下に 1 つ以上の行があるためです。ただし、これらのサブテーブルはすべて同じスタイルで、テーブルとしてコーディングされていません。代わりに、異なるクラスを使用してスタイルを設定するだけです (これは主に、ヘッダーを含む各行が非常に多く、非常に小さいためです)。
私がやりたいことは、サブテーブルのいずれかをホバーすると、そのヘッダーと現在指している行の両方が背景色を変更することです (後者は CSS で簡単に実現できます)。オンラインで見つかった JavaScript のおかげで、私はこれを達成することができました -おそらくこれをよりよく説明しているサンプル コード を参照してください。以下のコードも参照してください - ただし、各サブヘッダーに一意の ID が必要です。(各サブテーブルは個別の tbody を使用することに注意してください。onMouseover
イベントが代わりに各行に適用された場合、ある行から別の行にホバリングすると、サブヘッダーの色がちらつく/オン/オフになります-これは CSS では決して発生しませんが、 JavaScript を使用して - もちろん、さらに多くのコードを作成します。)
各サブヘッダーに一意の ID を割り当てる代わりに、代わりにクラスを使用するソリューションが必要です。各サブテーブルが同じものを使用していることを確認します (もちろん、クラスを割り当てtbody
ます)。これで難しいのは、現在のサブテーブルのヘッダーだけが影響を受け、すべてが同時に影響を受けないようにすることだと思います。各サブテーブルが実際に個別のテーブルとしてコード化されているソリューションを作成する方が簡単な場合 (セマンティックの観点からも優れている可能性があります)、そうしてください。もちろん、JavaScript がonMouseover
etc イベントを単独で適用した場合は、それを各サブテーブルのインライン コードに入れる必要がなくなります。ボタンなどに対してこれを実行できることがわかったので、これが可能だとします。
私は 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>