各テーブル行タグに JavaScript を配置するのではなく、Prototype ライブラリを使用して控えめな JavaScript を作成し、各行に onmouseover および onmouseout イベントを挿入するにはどうすればよいですか?
(mootools、jQueryなどの代わりに)Prototypeライブラリを利用した回答が最も役立ちます。
各テーブル行タグに JavaScript を配置するのではなく、Prototype ライブラリを使用して控えめな JavaScript を作成し、各行に onmouseover および onmouseout イベントを挿入するにはどうすればよいですか?
(mootools、jQueryなどの代わりに)Prototypeライブラリを利用した回答が最も役立ちます。
<table id="mytable">
<tbody>
<tr><td>Foo</td><td>Bar</td></tr>
<tr><td>Bork</td><td>Bork</td></tr>
</tbody>
</table>
<script type="text/javascript">
$$('#mytable tr').each(function(item) {
item.observe('mouseover', function() {
item.setStyle({ backgroundColor: '#ddd' });
});
item.observe('mouseout', function() {
item.setStyle({backgroundColor: '#fff' });
});
});
</script>
プロトタイプaddClassName
とremoveClassName
メソッドを使用できます。
ハイライトされた に適用する CSS クラス「hilight」を作成します<tr>
。次に、ページの読み込み時に次のコードを実行します。
var rows = $$('tbody tr');
for (var i = 0; i < rows.length; i++) {
rows[i].onmouseover = function() { $(this).addClassName('hilight'); }
rows[i].onmouseout = function() { $(this).removeClassName('hilight'); }
}
少し一般的な解決策:
マウスポインターを上に置くと強調表示される行を持つテーブルを作成する簡単な方法が必要だとしましょう。理想的な世界では、これは非常に簡単で、単純な CSS ルールが 1 つだけあります。
tr:hover { background: red; }
残念ながら、古いバージョンの IE は、A 以外の要素で :hover セレクターをサポートしていません。そのため、JavaScript を使用する必要があります。
その場合、ホバー可能な行を持つテーブルをマークするために、テーブル クラス "highlightable" を定義します。表の行にクラス「highlight」を追加・削除することで背景の切り替えを行います。
CSS
table.highlightable tr.highlight { background: red; }
JavaScript (プロトタイプを使用)
// when document loads
document.observe( 'dom:loaded', function() {
// find all rows in highlightable table
$$( 'table.highlightable tr' ).each( function( row ) {
// add/remove class "highlight" when mouse enters/leaves
row.observe( 'mouseover', function( evt ) { evt.element().addClassName( 'highlight' ) } );
row.observe( 'mouseout', function( evt ) { evt.element().removeClassName( 'highlight' ) } );
} );
} )
HTML
あとは、必要なテーブルに "highlightable" クラスを追加するだけです。
<table class="highlightable">
...
</table>
@swilliams のコードを少し変更しました。
$$('#thetable tr:not(#headRow)').each(
これにより、強調表示されないヘッダー行を持つテーブルを作成できます。
<tr id="headRow">
<th>Header 1</th>
</tr>
次のように、各行に対して何かを行うことができます。
$('tableId').getElementsBySelector('tr').each(function (row) {
...
});
したがって、その関数の本体では、'row' 変数の各行に一度に 1 つずつアクセスできます。その後、 Event.observe(row, ...) を呼び出すことができます
したがって、次のようなものが機能する可能性があります。
$('tableId').getElementsBySelector('tr').each(function (row) {
Event.observe(row, 'mouseover', function () {...do hightlight code...});
});
JSを使用せずに、行の背景、マウスオーバーで行が強調表示されるための興味深い解決策を見つけました。ここにリンクがあります
すべてのブラウザで動作します。IE6/7/8の場合..。
tr{ position: relative; }
td{ background-image: none }
また、Safariの場合、各TDに負の背景位置を使用します。