質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

3回答

9581閲覧

tableのrowspanになっている行3行以上をまとめてhoverしたい

rirukaporuka

総合スコア6

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

1グッド

1クリップ

投稿2018/03/19 07:31

###前提・実現したいこと

  1. rowspanの行すべてを一度にhoverしたい。(4行分とか)
  2. rowspanの値はまちまちである。
  3. ソートを使用しているのでtbodyで区切ることができない。

現状

tr部分のみがhoverになる。

該当のソースコード

//html// <table id="t_company" class="cl_table1"> <colgroup> <col style="width:8em;"/> <col style="width:20em;"/> <col style="width:20em;"/> <col style="width:16em;"/> <col style="width:10em;"/> <col style="width:6em;"/> <col style="width:10em;"/> <col style="width:10em;"/> </colgroup> <thead> <tr> <th>ID</th> <th>会社名</th> <th>メール</th> <th>会員番号</th> <th>ID</th> <th>xxx</th> <th>日付</th> <th>契約</th> </tr> </thead> <tbody> <tr> <td><a href="#">1234556</a></td> <td ><a href="#">XXXXXXX株式会社</a></td> <td>xxxxxxxxxxxxxxxx</td> <td>vvvvvvvvvvvvv</td> <td>11111111111111<br />22222222222</td> <td>330</td> <td>2018/01/01</td> <td>ご契約中</td> </tr> <tr> <td rowspan="4"><a href="#">1234556</a></td> <td rowspan="4"><a href="#">XXXXXXX株式会社</a></td> <td>xxxxxxxxxxxxxxxx</td> <td>vvvvvvvvvvvvv</td> <td>11111111111111<br />22222222222</td> <td>330</td> <td>2018/01/01</td> <td>ご契約中</td> </tr> <tr class="expand-child"> <td>XXXXXXX株式会社</td> <td>xxxxxxxxxxxxxxxx</td> <td>11111111111111</td> <td>40</td> <td>&nbsp;</td> <td>お手続き中</td> </tr> <tr class="expand-child"> <td>XXXXXXX株式会社</td> <td>xxxxxxxxxxxxxxxx</td> <td>11111111111111</td> <td>40</td> <td>&nbsp;</td> <td>お手続き中</td> </tr> <tr class="expand-child"> <td>XXXXXXX株式会社</td> <td>xxxxxxxxxxxxxxxx</td> <td>11111111111111</td> <td>40</td> <td>&nbsp;</td> <td>お手続き中</td> </tr> <tr> <td rowspan="2">123456</td> <td rowspan="2">XXXXXXX株式会社</td> <td>xxxxxxxxxxxxxxxx</td> <td>vvvvvvvvvvvvv</td> <td>11111111111111<br />22222222222</td> <td>330</td> <td>2018/01/01</td> <td>ご契約中</td> </tr> <tr class="expand-child"> <td>xxxxxxxxxxxxxxxx</td> <td>vvvvvvvvvvvvv</td> <td>11111111111111<br />22222222222</td> <td>330</td> <td>2018/01/01</td> <td>ご契約中</td> </tr> <tr> <td><a href="#">1234556</a></td> <td ><a href="#">XXXXXXX株式会社</a></td> <td>xxxxxxxxxxxxxxxx</td> <td>vvvvvvvvvvvvv</td> <td>11111111111111<br />22222222222</td> <td>330</td> <td>2018/01/01</td> <td>ご契約中</td> </tr> </tbody> </table> //Java// <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="js/jquery.tablesorter.min.js"></script> <script> $(".cl_table1 tr").hover( function(){ var rowCell = $(this).find('td[rowspan]'); var rowValue = rowCell.attr('rowspan'); rowCell.closest('tr').nextAll(':lt(' + (rowValue - 1) + ')'.addClass('rowhover'); }, function(){ $(".cl_table1 tr").removeClass("rowhover"); } ); </script> //css// #t_company{ margin:0 0 10px 0; } .cl_table1{ font-size:12px; clear:both; border-collapse:collapse; width:100%; } .cl_table1 tbody{ color:#fff; } .cl_table1 tr:hover, .cl_table1 tr:active{ background:#1e90ff; } .cl_table1 td a{ display:block; width:100%; height:100%; cursor:pointer; } .cl_table1 th{ padding:6px 3px; text-align:left; background:#000080; border-bottom:1px solid #ccc; } .cl_table1 td{ padding:3px 5px; border-bottom:1px dotted #ccc; }
defghi1977👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

パッと思いつくのは出力時にhoverさせたいまとまりで共通のクラス名をつけてセレクタでまとめて取得する方法ですかね。id列ユニークが前提ですが。

html

1<tr class="id_12345678"> 2<td rowspan="2">12345678</td> 3<td rowspan="2">XXXXXXX株式会社</td> 4<td>xxxxxxxxxxxxxxxx</td> 5<td>vvvvvvvvvvvvv</td> 6<td>11111111111111<br />22222222222</td> 7<td>330</td> 8<td>2018/01/01</td> 9<td>ご契約中</td> 10</tr> 11<tr class="expand-child id_12345678"> 12<td>xxxxxxxxxxxxxxxx</td> 13<td>vvvvvvvvvvvvv</td> 14<td>11111111111111<br />22222222222</td> 15<td>330</td> 16<td>2018/01/01</td> 17<td>ご契約中</td> 18</tr>

javascript

1$(".cl_table1 tr").hover( 2 function(){ 3 console.log($("."+$(this).attr("class").replace("expand-child","").trim())); 4 $("."+$(this).attr("class").replace("expand-child","").trim()).addClass("rowhover"); 5 }, 6 function(){ 7 $(".cl_table1 tr").removeClass("rowhover"); 8 } 9);

stylesheet

1.rowhover, 2.cl_table1 tr:hover, 3.cl_table1 tr:active{ 4background:#1e90ff; 5}

投稿2018/03/19 08:28

Kaninippa

総合スコア56

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

できるだけ仕組みを単純化する方法を考えてみました. が, なかなかエレガントな構成にするのは難しいですね.

HTML

1<table data-selected="1" id="table"> 2 <tr data-rowg="1"><td rowspan="3">a</td><td>a</td><td>a</td><td>a</td></tr> 3 <tr data-rowg="1"><td>a</td><td>a</td><td>a</td></tr> 4 <tr data-rowg="1"><td>a</td><td>a</td><td>a</td></tr> 5 <tr data-rowg="2"><td rowspan="2">a</td><td>a</td><td>a</td><td>a</td></tr> 6 <tr data-rowg="2"><td>a</td><td>a</td><td>a</td></tr> 7</table>

CSS

1table{ 2 width:100%; 3 border-collapse: collapse; 4} 5/*この部分の動的生成を要する*/ 6table[data-selected="1"]:hover tr[data-rowg="1"], 7table[data-selected="2"]:hover tr[data-rowg="2"]{ 8 background-color:yellow; 9}

JavaScript

1table.onmousemove = e => { 2 const tr = e.target.closest("tr"); 3 tr && (table.dataset.selected = tr.dataset.rowg); 4}
  • HTMLには行グループであることを示す属性を追加しておく(ここではdata-rowg)
  • CSSにはテーブルでの選択行と行グループが一致した際のスタイルを指定しておく.
  • JavaScriptではマウスホバー時の行グループ番号をtable要素に設定する.

課題

  • スタイルシートの動的出力を要する.(テーブルが可変行数の場合はこの部分が書き換わる)

投稿2018/03/19 08:52

defghi1977

総合スコア4756

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

たとえば以下のように、rowspanというものは列ごとに処理がわかれるため
任意の複数行を選ぶことはできません

こういう場合は、こうというような細かい仕様がなければ
ぼやっとした要求定義だけされても実装は難しいとおもいます

<style> tr:hover{ background-Color:yellow; } </style> <table border> <tr> <td>x</td> <td rowspan=2>x</td> <td>x</td> <td>x</td> <td rowspan=4>x</td> </tr> <tr> <td>x</td> <td rowspan=3>x</td> <td>x</td> </tr> <tr> <td>x</td> <td rowspan=2>x</td> <td>x</td> </tr> <tr> <td>x</td> <td>x</td> </tr> </table>

投稿2018/03/19 07:44

yambejp

総合スコア114883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問