前提・実現したいこと
初投稿です。どうぞよろしくお願いします!!
HTMLでテーブルを表示し、マウスポインタがある行と列をハイライト(着色)させたいです。
以下のサイトにあるjavascriptのコードを参考に実装を試みました。
https://so-zou.jp/web-app/tech/programming/javascript/dom/node/element/html/table/#no9
発生している問題・エラーメッセージ
colgroupなどを設定し試みたのですが、どうしても期待通りに動作しません。
以下、現在の状況です。
https://gyazo.com/c7bb48b3edcd485fcd9321ba0c69dc54
該当のソースコード
haml
1 %table#home-table.home-table 2 %colgroup{:span => 5} 3 %tbody 4 %tr 5 %th.no{:rowspan => 2} No 6 %th.name{:rowspan => 2} Name 7 %th.pts{:rowspan => 2} PTS 8 %th.fg{:colspan => 3} FG 9 %th.twop{:colspan => 3} 2P 10 %th.threep{:colspan => 3} 3P 11 %th.ft{:colspan => 3} FT 12 %th.reb{:colspan => 3} REB 13 %th.as{:rowspan => 2} AS 14 %th.to{:rowspan => 2} TO 15 %th.st{:rowspan => 2} ST 16 %th.bs{:rowspan => 2} BS 17 %th.pf{:rowspan => 2} PF 18 %tr 19 %th.fgm M 20 %th.fga A 21 %th.fgp % 22 %th.twopm M 23 %th.twopa A 24 %th.twopp % 25 %th.threepm M 26 %th.threepa A 27 %th.threepp % 28 %th.ftm M 29 %th.fta A 30 %th.ftp % 31 %th.or OR 32 %th.dr DR 33 %th.ttlreb Total 34 - (1..18).each do |i| 35 %tr 36 %td.darkblue= 0 37 %td.darkblue 山田太郎 38 %td.blue= 0 39 %td.blue= 0 40 %td.blue= 0 41 %td.blue= 0 42 %td.lightblue= 0 43 %td.lightblue= 0 44 %td.blue= 0 45 %td.lightblue= 0 46 %td.lightblue= 0 47 %td.blue 100% 48 %td.lightblue= 0 49 %td.lightblue= 0 50 %td.blue= 0 51 %td.lightblue= 0 52 %td.lightblue= 0 53 %td.blue= 0 54 %td.lightblue= 0 55 %td.lightblue= 0 56 %td.lightblue= 0 57 %td.lightblue= 0 58 %td.lightblue= 0
Javascript
1window.addEventListener( "DOMContentLoaded", function(){ 2var TARGET_CLASS = 'home-table'; 3 var CELL_COLOR = 'gray'; 4 5 var tables = document.body.getElementsByTagName( 'table' ); 6 console.log(tables); 7 for( var i = 0; i < tables.length; i++ ) 8 { 9 if( tables[ i ].className.indexOf( TARGET_CLASS ) != -1 ) 10 { 11 AttachHighlighting( tables[ i ] ); 12 } 13 } 14 15 16 function AttachHighlighting( table ) 17 { 18 for( var i = 0; i < table.rows.length; i++ ) 19 { 20 var cells = table.rows[ i ].cells; 21 for( var k = 0; k < cells.length; k++ ) 22 { 23 var cell = cells[ k ]; 24 if( cell.tagName != 'th' ) 25 { 26 cell.onmouseover = function() 27 { 28 var row = this.parentNode; 29 var table = row.parentNode.parentNode; 30 var cols = table.getElementsByTagName( 'col' ); 31 32 for( var i = 0; i < row.cells.length; i++ ) 33 { 34 cols[ i ].style.backgroundColor 35 = ( row.cells[ i ] == this )? CELL_COLOR : ''; 36 } 37 38 for( var i = 0; i < table.rows.length; i++ ) 39 { 40 table.rows[ i ].style.backgroundColor 41 = ( table.rows[ i ] == row )? CELL_COLOR : ''; 42 } 43 } 44 } 45 } 46 } 47 48 var colgroups = table.getElementsByTagName( 'colgroup' ); 49 for( var i = 0; i < colgroups.length; i++ ) 50 { 51 var colgroup = colgroups[ i ]; 52 var cols = colgroup.getElementsByTagName( 'col' ); 53 54 for( var k = cols.length; k < colgroup.span; k++ ) 55 { 56 var col = document.createElement( 'col' ); 57 colgroup.appendChild( col ); 58 } 59 } 60 61 table.onmouseout = function() 62 { 63 var cols = this.getElementsByTagName( 'col' ); 64 for( var i = 0; i < cols.length; i++ ) 65 { 66 cols[ i ].style.backgroundColor = ''; 67 } 68 69 for( var i = 0; i < this.rows.length; i++ ) 70 { 71 this.rows[ i ].style.backgroundColor = ''; 72 } 73 } 74 } 75 76 }, false ); 77
メッセージ
非常に初歩的なところだと思いますが、何時間もつまづいてしまいました。
どなたかもしよければお願いします!