Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Выделить строку в таблице html при нажатии мыши / 25 сообщений из 28, страница 1 из 2
29.03.2017, 10:18
    #39428984
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
Задача вроде бы простая: при щелчке мышью в любую ячейку таблицы, должна выделиться вся строка. И оставаться подкрашенной, пока не выберем другую строчку в таблице или щелкнем в любое место экрана. Для нормальных браузеров решается через tabindex и одной записью на CSS:
Код: css
1.
tr:focus {background: ...}

Но Internet Explorer как обычно, в своем репертуаре. IE 11 не хочет работать с tr:focus
Решения в гугле нет, поэтому приведу здесь, может кому пригодится (работает, даже если в ячейке есть другие элементы)
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
<!DOCTYPE html>
<html>
<head>
<title>Выделить строку в таблице html при нажатии мыши</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
* {font:12px verdana;}
div {border:1px solid #007200;}
p {border:1px solid #0040A7; margin:5px;}
span {border:1px solid #F58220;}
table {border-collapse:collapse;}
td {border:1px solid #ccc; padding:5px;}
tr:hover {background:#E2EEFF;}
tr:focus {background:#6598C7; color:#fff; outline:0;}
</style>
</head>
<body>
<table id="data">
  <tr tabindex="-1">
    <td>Текст в ячейке <div>Здесь див  <p>Текст абзаца, который внутри див</p>  <span>Текст в спан</span> </div> </td>
    <td>Текст в ячейке 2 <td>Оперативно-тактическое решение
  </tr>
  <tr tabindex="-1">
    <td>Простая строка 1, простая ячейка 1  <td>Простая строка 1, простая ячейка 2 <td>Выполнение поставленных боевых задач
  </tr>
  <tr tabindex="-1">
    <td>Простая строка 2, простая ячейка 1 <td>Простая строка 2, простая ячейка 2
  </tr>
  <tr tabindex="-1">
    <td>Простая строка 3, простая ячейка 1 <td>Простая строка 3, простая ячейка 2 <td> <div>у строки выше, специально нет ячейки</div>
  </tr>
</table>

<script>
function getParentTag(node,tag) {//Найти ближайшего родителя по tagName. Здесь мы движемся вверх, пока не встретим родителя, у которого тег = нашему заданному tag
  if (node) {return (node.tagName == tag) ? node : getParentTag(node.parentElement,tag);}
  return null;
}
document.getElementById('data').addEventListener('click', getRow);
function getRow(e) {
  var row = getParentTag(e.target,'TR');
  if (!row) {return;}
  row.focus();
}
</script>
</body>
</html>
...
Рейтинг: 0 / 0
29.03.2017, 10:34
    #39429000
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89,

ИМХО, идеологически и семантически неправильно и некорректно использовать фокус для стилевого выделения строки таблицы.

Используем простейший способ с CSS-классом active и toggle по клику. Работает как часы, работает везде, понятно всем, отлично отлаживается, можно легко выбрать какие элементы активные и не думать и гадать, а сработает ли это у пользователя, семантически верно. Задача и решение стара как мир.
...
Рейтинг: 0 / 0
29.03.2017, 10:36
    #39429001
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89,

Cамая большая проблема у фокуса, что решение на фокусах пойдёт лесом, если надо выделить строку таблицы и ещё что-нибудь.
...
Рейтинг: 0 / 0
29.03.2017, 11:03
    #39429026
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
hVostt,

приведите, пожалуйста, простое решение для IE. Таблицу можно взять из моего первого сообщения.
...
Рейтинг: 0 / 0
29.03.2017, 11:04
    #39429029
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89,

row.focus(); нет такого
строка таблицы не может получить фокус.
...
Рейтинг: 0 / 0
29.03.2017, 11:12
    #39429031
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89,
как вариант

Код: javascript
1.
2.
3.
4.
  $('.part').on('click', function () {
                $('#tbl1 .part').css('background', 'none'); // убираем со всех строк
                $(this).css('background', '#ccffcc');        // назначаем 
            });



.part - класс в строках таблицы
...
Рейтинг: 0 / 0
29.03.2017, 11:12
    #39429033
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
вадя,

любой элемент через tabindex может получить фокус
...
Рейтинг: 0 / 0
29.03.2017, 11:14
    #39429034
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89любой элемент через tabindex может получить фокус
да . забыл я про такое....
...
Рейтинг: 0 / 0
29.03.2017, 11:16
    #39429037
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
вадя,

похожий вариант с перебором я обдумывал, но не знаю какова будет скорость на больших таблицах...
...
Рейтинг: 0 / 0
29.03.2017, 11:21
    #39429047
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89похожий вариант с перебором я обдумывал, но не знаю какова будет скорость на больших таблицах...
можно хранить указатель на выделенную строку и при новом клике удалить только с него и назначить новую строку.
...
Рейтинг: 0 / 0
29.03.2017, 11:30
    #39429052
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89hVostt,

приведите, пожалуйста, простое решение для IE. Таблицу можно взять из моего первого сообщения.

https://jsfiddle.net/vdz7ajwn/
...
Рейтинг: 0 / 0
29.03.2017, 11:32
    #39429055
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89похожий вариант с перебором я обдумывал, но не знаю какова будет скорость на больших таблицах...

Оптимизированный на скорость для огромных таблиц вариант:

https://jsfiddle.net/vdz7ajwn/1/
...
Рейтинг: 0 / 0
29.03.2017, 11:40
    #39429067
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89больших таблицах...
большие таблицы - это сколько строк?
...
Рейтинг: 0 / 0
29.03.2017, 11:58
    #39429080
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
вадяuser89больших таблицах...
большие таблицы - это сколько строк?Одно из моих приложений выдает 12 тыс.строк х 6 столбцов. Пользователи захотели, чтобы вся выборка тащилась в браузер. В локальной сети тормозов нет, а вся страница занимает меньше 5 Мб.
...
Рейтинг: 0 / 0
29.03.2017, 11:59
    #39429084
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
hVosttОптимизированный на скорость для огромных таблиц вариант:
https://jsfiddle.net/vdz7ajwn/1/ ОК. Спасибо.
...
Рейтинг: 0 / 0
29.03.2017, 12:22
    #39429112
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89Одно из моих приложений выдает 12 тыс.строк х 6 столбцов. Пользователи захотели, чтобы вся выборка тащилась в браузер
пример идиотов....
...
Рейтинг: 0 / 0
29.03.2017, 12:22
    #39429113
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89Одно из моих приложений выдает 12 тыс.строк х 6 столбцов. Пользователи захотели, чтобы вся выборка тащилась в браузер. В локальной сети тормозов нет, а вся страница занимает меньше 5 Мб.

Если строк будет сильно больше?
...
Рейтинг: 0 / 0
29.03.2017, 12:42
    #39429149
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
hVostt,

сильно больше не будет. В самом худшем случае за 15 тыс. не перевалит.
...
Рейтинг: 0 / 0
29.03.2017, 13:09
    #39429185
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89hVostt,

сильно больше не будет. В самом худшем случае за 15 тыс. не перевалит.

Рекомендую уже прямо сейчас озаботиться решением этого вопроса. Лучше уж сделать пейджинг, ограничить страницу пейджинга 12 тыс. строк и по крайне мере не столкнуться с проблемой: срочно, прямо сейчас, пользователи не могут, всё тормозит, аааа!!! Ну и вообще рекомендую никогда не придерживаться прогнозирования удобного "худшего случая". Худший случай это миллионы строк. Если не здесь, то где-нибудь в другом месте. Если не сейчас и не завтра, то послезавтра.
...
Рейтинг: 0 / 0
21.04.2017, 10:03
    #39442066
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
Забыл решение выложить   Оно основано на варианте от hVostt, только без jQuery
Здесь 2 варианта. Через :focus и setAttribute
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
<!DOCTYPE html>
<html>
<head>
<title>Выделить строку в таблице html при нажатии мыши</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
* {font:12px verdana;}
b {font-weight:700;}
div {border:1px solid #007200;}
p {border:1px solid #0040A7; margin:5px;}
span {border:1px solid #F58220;}
table {border-collapse:collapse; margin:5px 0;}
td {border:1px solid #ccc; padding:5px;}
tr:hover {background:#E2EEFF;}
tr:focus, .activeRow, .activeRow:hover {background:#6598C7; color:#fff; outline:0;}
</style>
</head>
<body>
<b>Вариант 1.</b> Через :focus. Если щелкнуть за пределами таблицы, то выделение снимется.
<table id="data1">
  <tr tabindex="-1">
    <td>Текст в ячейке <div>Здесь див  <p>Текст абзаца, который внутри див</p>  <span>Текст в спан</span> </div> </td>
    <td>Текст в ячейке 2 <td>Оперативно-тактическое решение
  </tr>
  <tr tabindex="-1">
    <td>Простая строка 1, простая ячейка 1  <td>Простая строка 1, простая ячейка 2 <td>Выполнение поставленных боевых задач
  </tr>
  <tr tabindex="-1">
    <td>Простая строка 2, простая ячейка 1 <td>Простая строка 2, простая ячейка 2
  </tr>
  <tr tabindex="-1">
    <td>Простая строка 3, простая ячейка 1 <td>Простая строка 3, простая ячейка 2 <td> <div>у строки выше, специально нет ячейки</div>
  </tr>
</table>

<br><br>
<b>Вариант 2.</b> Здесь если щелкнуть за пределами таблицы, то строка останется выделенной.
<table id="data2">
  <tr>
    <td>Текст в ячейке <div>Здесь див  <p>Текст абзаца, который внутри див</p>  <span>Текст в спан</span> </div> </td>
    <td>Текст в ячейке 2 <td>Оперативно-тактическое решение
  </tr>
  <tr>
    <td>Простая строка 1, простая ячейка 1  <td>Простая строка 1, простая ячейка 2 <td>Выполнение поставленных боевых задач
  </tr>
  <tr>
    <td>Простая строка 2, простая ячейка 1 <td>Простая строка 2, простая ячейка 2
  </tr>
  <tr>
    <td>Простая строка 3, простая ячейка 1 <td>Простая строка 3, простая ячейка 2 <td> <div>у строки выше, специально нет ячейки</div>
  </tr>
</table>

<script>
function getParentTag(node,tag) {//Найти ближайшего родителя по tagName. Здесь мы движемся вверх, пока не встретим родителя, у которого тег = нашему заданному tag
  if (node) {return (node.tagName == tag) ? node : getParentTag(node.parentElement,tag);}
  return null;
}

document.getElementById('data1').addEventListener('click', selectRow1);
function selectRow1(e) {
  var row = getParentTag(e.target,'TR');
  if (!row) {return;}
  row.focus();
  //console.log(document.activeElement);
}

document.getElementById('data2').addEventListener('click', selectRow2);
function selectRow2(e) {
  var row = getParentTag(e.target,'TR');
  if (!row) {return;}
  var tbl = this,  idx = tbl.getAttribute('activeRowIndex');
  if (idx) {tbl.rows[idx].classList.remove('activeRow');}
  row.classList.add('activeRow');
  tbl.setAttribute('activeRowIndex', row.rowIndex);
}
</script>
</body>
</html>

...
Рейтинг: 0 / 0
03.05.2017, 14:13
    #39447862
Alex_Wong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89,

спасибо за пример

подскажите, пожалуйста, как для Варианта_2,
при клике по строке (для выделения) , получить
содержимое второй ячейки этой строки.

Пример:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
<!DOCTYPE html>
<html lang="ru-RU">
<head>
  <meta charset="UTF-8" />                  
    <meta http-equiv="expires" content="0" />
    <meta http-equiv="Cache-Control" content="no-cache" />
  <title>...</title>
<style>

  #tb, td {
  	border-collapse: collapse;
  	border: 1px solid grey;
    padding: 2px 8px 2px 12px;
  }
  #tb tr:hover {
    background-color: #ccc;
  }
  .activeRow, .activeRow:hover {background:#6598C7; color:#fff; outline:0;}

</style>
</head>  

<body>

<table id = "tb">
	<tr><td>1</td><td>qqq</td></tr>
	<tr><td>2</td><td>www</td></tr>
	<tr><td>3</td><td>sss</td></tr>
</table>


<script>

// Найти ближайшего родителя по tagName. Здесь мы движемся вверх, пока не встретим родителя,
// у которого тег = нашему заданному tag
function getParentTag(node,tag) {

  if (node) {return (node.tagName == tag) ? node : getParentTag(node.parentElement,tag);}
  return null;
}

document.getElementById('tb').addEventListener('click', selectRow2);

function selectRow2(e) {

  var row = getParentTag(e.target,'TR');
  if (!row) {return;}
  var tbl = this,  idx = tbl.getAttribute('activeRowIndex');
  if (idx) {tbl.rows[idx].classList.remove('activeRow');}
  row.classList.add('activeRow');
  tbl.setAttribute('activeRowIndex', row.rowIndex);
}
</script>
</body>
</html>




например, при клике по второй строке получить www
...
Рейтинг: 0 / 0
03.05.2017, 14:42
    #39447894
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
Alex_Wong, у элемента строка есть коллекция cells, тебе лишь нужно взять innerHTML у нужного по счету элемента коллекции

Пример из МСДН

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<HTML>
<SCRIPT LANGUAGE="JScript">
function numberCells() {
    var count=0;
    for (i=0; i < document.all.oTable.rows.length; i++) {
        for (j=0; j < document.all.oTable.rows(i).cells.length; j++) {
            document.all.oTable.rows(i).cells(j).innerText = count;
            count++;
        }
    }
}
</SCRIPT>
<BODY onload="numberCells()">
<TABLE id=oTable border=1>
<TR><TH>&nbsp;</TH><TH>&nbsp;</TH><TH>&nbsp;</TH><TH>&nbsp;</TH></TR>
<TR><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>
<TR><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>
</TABLE>
</BODY>
</HTML> 
...
Рейтинг: 0 / 0
03.05.2017, 15:07
    #39447922
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
Alex_Wong,

как правильно сказал krvsa, надо использовать cells . Возможно, этот шаблон будет легче для понимания:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
var rows = myTable.rows;
for (i=0; i<rows.length; i++) {
  var td = rows[i].cells;
  for (j=0; j<td.length; j++) {
   td[j].innerHTML = 'cell[' + i +','+ j +']';
  }
}


На всякий случай, стили для CSS
Код: css
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
/* Все строки, кроме первой */
tr:not(:first-child) td {border:1px solid #007200;}

/* с первой по 3-ю колонку */
td:nth-child(-n+3)

/* С 5-го столбца и до конца */
td:nth-child(n+5) {color:#008200;}

/* Можно и так(сложнее). Начиная с 3-й колонки и до конца */
td+td+td {text-align:right;}


И полигон "Добавить-удалить строки-столбцы"
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Добавить/Удалить столбцы</title>
<style>
table {
	font:15px arial,sans-serif;
	border-collapse:collapse;
	margin-bottom:10px;
}
td {
	border:1px solid #aaa;
	padding:4px;
}
button {margin:2px;}
</style>
</head>
<body>
<!--
Порывшись в Javascript доках, я нашёл всего несколько кроссбраузерных функций, отвечающих стандарту W3C. Используя которые, тем не менее, можно творить с html таблицей
всё что угодно:
Метод						 Описание
createCaption()	Создает пустой элемент заголовка и добавляет его в таблицу
createTFoot()	Создает пустой элемент TFOOT и добавляет его в таблицу
createTHead()	Создает пустой элемент THEAD и добавляет его в таблицу
insertRow()	Создает пустую строку и добавляет её в таблицу
insertCell(индекс) вставить пустую ячейку
deleteCaption()	Удаляет первый элемент caption
deleteRow() 	Удаляет строку из таблицы
deleteTFoot()	Удаляет элемент TFOOT из таблицы
deleteTHead()	Удаляет элемент THEAD из таблицы
deleteCell(индекс) Удаляет ячейку
-->
<table id="myTable">
	<tr> <td>cell 1_1</td> <td>cell 1_2</td> </tr>
	<tr> <td>cell 2_1</td> <td>cell 2_2</td> </tr>
	<tr> <td>cell 3_1</td> <td>cell 2_3</td> </tr>
	<tr> <td>cell 4_1</td> <td>cell 2_4</td> </tr>
</table>
<button type="button" onclick="AddRowTop()">Вставить строку на самый верх таблицы</button>
<button type="button" onclick="AddRowBottom()">Вставить строку в самый низ таблицы</button>
<br>
<button type="button" onclick="AddColumnLeft()">Добавить колонку в начало таблицы</button>
<button type="button" onclick="AddColumnRight()">Добавить колонку в конец таблицы</button>

<script>
function gid(i) {return document.getElementById(i);}

function AddRowTop() {
	var el = gid('myTable');
	var cols_cnt = el.rows[0].cells.length;
	var row = el.insertRow(0), i = 0;

	for (i=0; i < cols_cnt; i++) {
		var NewCell = row.insertCell(-1);
		NewCell.innerHTML = 'Text on top ' + (i+1).toString();
	}
}

function AddRowBottom() {
	var el = gid('myTable'), i = 0;
	var cols_cnt = el.rows[el.rows.length-1].cells.length;
	var row = el.insertRow(-1);

	for (i=0; i < cols_cnt; i++) {
		var NewCell = row.insertCell(-1);
		NewCell.innerHTML = 'Text on bottom ' + (i+1).toString();
	}
}

function AddColumnLeft() {
	var el = gid('myTable');
	var rows_cnt = el.rows.length;
	var cols_cnt = el.rows[0].cells.length;
	var cell, i = 0;

	for (i=0; i < rows_cnt; i++) {
		cell = el.rows[i].insertCell(0);
		cell.innerHTML = Math.floor(Math.random()*10000);
	}
}

function AddColumnRight() {
	var el = gid('myTable');
	var rows_cnt = el.rows.length;
	var cols_cnt = el.rows[0].cells.length;
	var cell, i = 0;

	for (i=0; i < rows_cnt; i++) {
		cell = el.rows[i].insertCell(-1);
		cell.innerHTML = Math.floor(Math.random()*10000);
	}
}
</script>
</body>
</html>

...
Рейтинг: 0 / 0
03.05.2017, 17:22
    #39448048
Alex_Wong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
user89, krvsa спасибо за помощь

делал так :


Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
<!DOCTYPE html>
<html lang="ru-RU">
<head>
  <meta charset="UTF-8" />                  
    <meta http-equiv="expires" content="0" />
    <meta http-equiv="Cache-Control" content="no-cache" />
  <title>...</title>
<style>

  #tb, td {
  	border-collapse: collapse;
  	border: 1px solid grey;
    padding: 2px 8px 2px 12px;
  }
  #tb tr:hover {
    background-color: #ccc;
  }
  .activeRow, .activeRow:hover {background:#6598C7; color:#fff; outline:0;}

</style>
</head>  

<body onload="numberCells()">

<table id = "tb">
	<tr onclick="cli(this)"><td>1</td><td>qqq</td></tr>
	<tr onclick="cli(this)"><td>2</td><td>www</td></tr>
	<tr onclick="cli(this)"><td>3</td><td>sss</td></tr>
</table>
<script>

function getParentNode(oThis, sNodeName) {
   while(oThis.nodeName != sNodeName && oThis.nodeName != 'BODY') {oThis=oThis.parentNode;}
   return oThis.nodeName!='BODY'?oThis:null;
}


function cli(s) {
var tr = getParentNode(s, 'TR');                                                                                                                          //
var rq = tr.rowIndex; // определяю номер строки по которой кликнули;
alert('info = '+document.getElementById('tb').rows[rq].cells[1].innerHTML);
}
</script>
</body>
</html>




потом выделял строку цветом.

Хотел компактно сделать с Вашим примером, - пока не получилось.
...
Рейтинг: 0 / 0
03.05.2017, 18:06
    #39448097
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделить строку в таблице html при нажатии мыши
Alex_Wong,

на каждую строку в таблице, вешать клик не надо. Достаточно 1 раз на контейнер...
Так пойдет?
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
<!DOCTYPE html>
<html>
<head>
<title>tmp</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
*, *:before, *:after {box-sizing:border-box; font:14px arial;}
table {border-collapse: collapse;}
td {	
  border: 1px solid #ccc;
  padding: 2px 8px 2px 12px;
}
#tb tr:hover {background:#E2EEFF;}
#tb .activeRow, #tb .activeRow:hover {background:#6598C7; color:#fff;}
</style>
</head>
<body>
<table id="tb">
  <tr> <td>1 <td>qqq
  <tr> <td>2 <td>www
  <tr> <td>3 <td>sss
</table>

<script>
function getParentTag(node,tag) {
  if (node) {return (node.tagName == tag) ? node : getParentTag(node.parentElement,tag);}
  return null;
}

var tb = document.getElementById('tb');
tb.setAttribute('activeRowIndex', 0);
tb.addEventListener('click', cli);
function cli(e) {
  var row = getParentTag(e.target,'TR');
  if (!row) {return;}
  var tbl = this,  idx = tbl.getAttribute('activeRowIndex');
  tbl.rows[idx].classList.remove('activeRow');
  row.classList.add('activeRow');
  tbl.setAttribute('activeRowIndex', row.rowIndex);
  alert('info = ' + row.cells[1].innerHTML);
}
</script>
</body>
</html>

...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Выделить строку в таблице html при нажатии мыши / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]