/* 14.06.2006 */
Подсвечивание строк таблицы
Автор: Цыгырлаш Игорь (14.06.2006)
Не редкой является ситуация, когда при просмотре данных в таблице можно перескочить взглядом с одной строки на другую, при этом заметить, что смотришь не туда куда нужно, не всегда удается. Однако этой путаницы можно легко избежать, подсвечивая нужную строку в таблице (а в этом нам поможет Javascript). Подсвеченная строка выделяется из серой массы строк таблицы и не позволяет сбиться, к тому же, это ещё и красиво смотрится.
Начнем с примера
Пример 1. Подсветка строк таблицы при наведении мыши на строку + подсветка последней кликнутой строки.
Поводите мышкой над строками таблицы, покликайте на нескольких строках.
Подсвечивание строк таблицы - Вебмастер: как создать свой сайт
Придаем таблице некий начальный облик с помощью CSS. ... Теперь
осталось определить стили, которые будут применяться к ряду при
наведении ...
http://webmasterschool.ru/articles/article39.php
Заголовок
1
Значение
Значение
2
Значение
Значение
3
Значение
Значение
4
Значение
Значение
5
Значение
Значение
6
Значение
Значение
7
Значение
Значение
8
Значение
Значение
9
Значение
Значение
10
Значение
Значение
Нижний колонтитул
Нижний колонтитул
Пример 2. Подсветка по клику нескольких строк, а не только одной как в примере 1 (подсветка при наведении мыши на строку отключена).
Покликайте на нескольких строках.
Заголовок
1
Значение
Значение
2
Значение
Значение
3
Значение
Значение
4
Значение
Значение
5
Значение
Значение
6
Значение
Значение
7
Значение
Значение
8
Значение
Значение
9
Значение
Значение
10
Значение
Значение
Нижний колонтитул
Нижний колонтитул
Пример 3. Подсветка строк таблицы при наведении мыши на строку (подсветка по клику полностью отключена).
Поводите мышкой над строками таблицы.
Заголовок
1
Значение
Значение
2
Значение
Значение
3
Значение
Значение
4
Значение
Значение
5
Значение
Значение
6
Значение
Значение
7
Значение
Значение
8
Значение
Значение
9
Значение
Значение
10
Значение
Значение
Нижний колонтитул
Нижний колонтитул
Взгляд изнутри
Первым делом создаем обычную таблицу, без какой либо подсветки строк. Придаем таблице некий начальный облик с помощью CSS.
<html>
<head>
<style type="text/css">
/* задаем рамок таблицы */
table, td, th {
border: 1px solid black;
border-collapse: collapse;
}
/* цвет фона заголовочных ячеек (первый столбец) */
table TH {background-color: gold;}
</style>
</head>
<body>
<table id="myTable">
<tr>
<th>1</th><td>Значение</td><td>Значение</td>
</tr>
<tr>
<th>2</th><td>Значение</td><td>Значение</td>
</tr>
<tr>
<th>3</th><td>Значение</td><td>Значение</td>
</tr>
</table>
</body>
</html>
Это обычная таблица из 3 строк, по 3 ячейки в строке. Первая ячейка заголовочная и задана тегом TH.
1ЗначениеЗначение
2ЗначениеЗначение
3ЗначениеЗначение
Теперь добавляем функциональность подсветки. В разделе head подключаем библиотеку функций: <script type="text/javascript" src="/js/hltable.js"></script>, а после закрывающегося тега </table>, вызываем функцию highlightTableRows(), из ранее подключенной библиотеки, для инициализации подсветки.
Рассмотрим подробнее функцию highlightTableRows(), а вернее её аргументы.
Синтаксис: highlightTableRows(tableId, highlightClass, clickClass, multiple)
- tableId - id таблицы, к которой нужно применить подсвечивание;
- highlightClass - имя CSS-класса который нужно применить к строке (к тегу TR) при наведении на неё курсора мыши (если передать пустую строку, то подсветки при наведении не будет);
- clickClass - имя CSS-класса который нужно применить к строке (к тегу TR) при клике на ней (если передать пустую строку, то подсветки по клику не будет);
- multiple - этот аргумент разрешает или запрещает подсветку по клику нескольких строк, по умолчанию true - подсветка нескольких строк разрешена, если передать значение false, то подсвечиваться будет лишь последняя кликнутая строка.
Примеры:
- highlightTableRows("myTable", "className1"); //подсветка только при наведении
- highlightTableRows("myTable", "className1", "className2", false); //подсветка при наведении на строку курсора мыши и по клику на строке. Множественная подсветка строк по клику отключена.
- highlightTableRows("myTable", "", "className2"); //подсветка только по клику на строке. Множественная подсветка строк по клику разрешена.
Так. У нас есть таблица, библиотека функций, и мы знаем, как инициализировать подсветку. Теперь осталось определить стили, которые будут применяться к ряду при наведении и/или клике.
.hoverRow { background-color: yellow; }
.clickedRow { background-color: orange; }
В итоге документ принимает вид:
<html>
<head>
<!-- Подключаем библиотеку функций -->
<script type="text/javascript" src="/js/hltable.js"></script>
<style type="text/css">
table, td, th {border: 1px solid black; border-collapse: collapse;}
table th {background-color: gold;}
/* Определяем стили для подсвечивания строк */
.hoverRow { background-color: yellow; }
.clickedRow { background-color: orange; }
</style>
</head>
<body>
<table id="myTable">
<tr>
<th>1</th><td>Значение</td><td>Значение</td>
</tr>
<tr>
<th>2</th><td>Значение</td><td>Значение</td>
</tr>
<tr>
<th>3</th><td>Значение</td><td>Значение</td>
</tr>
</table>
<script type="text/javascript">
//Подсветка по клику и при наведении мышки на ряд, множественный выбор по клику разрешен
highlightTableRows("myTable","hoverRow","clickedRow");
</script>
</body>
</html>
И вот что получилось:
1ЗначениеЗначение
2ЗначениеЗначение
3ЗначениеЗначение
!!! Не забудьте скачать и сохранить у себя библиотеку функций hltable.js
Важно знать
Опера версии ниже 9 испытывает серьезные трудности с применением стилей к таблицам, содержащим разделы THEAD, TFOOT, TBODY.
Поверхностно о реализации
Как вы уже поняли, всю работу выполняет функция highlightTableRows(). Что же она делает? Данная функция назначает таблице обработчики событий: onmouseover и onmouseout для подсветки при наведении мыши на ряд, и onclick для подсветки по клику. Соответственно, когда пользователь наводит курсор на строку, срабатывает функция-обработчик onmouseover, которая добавляет к строке класс с именем, переданным вторым аргументом. При выходе за границы строки срабатывает событие onmouseout, которое отменяет применение к строке класса. Ну и по клику вызывается обработчик onclick, который либо применяет класс, переданный третьим аргументом, к строке, либо отменяет его действие. Также onclick смотрит на аргумент multiple, и если он равен false (запрещено множественное выделение строк по клику), то обработчик отменяет действие класса на строку которая была "кликнута" до этого, а затем применяет класс к новой строке.
Следует подчеркнуть, что обработчики назначаются именно таблице, элементу, соответствующему тегу TABLE, а не строкам или ячейкам, но при этом они (обработчики) срабатывают при возникновении события в строке, что происходит благодаря просачиванию события (event bubbling), когда событие в дочернем элементе запускает обработчики этого события в родительских элементах. Т.е., в нашем случае, событие, возникшее в строке (<TR>), запускает обработчики назначенные таблице (<TABLE>).
P.S.: В коде библиотеки функций для любознательных достаточно комментариев :-)
-> Обсудить статью в форуме
Аналит фармация поиск лекарств - реосорбилакт с накопительными скидками. . разрыв мениска
<- Назад к списку статей
Сайт работает с 2004 года.
admin@tigir.com