Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Инициировать событие по клику ячейки таблицы ( (https://javascript.ru/forum/events/75411-iniciirovat-sobytie-po-kliku-yachejjki-tablicy.html)

Sergey1986 06.10.2018 15:56

Инициировать событие по клику ячейки таблицы (
 
Всем доброго времени!
Прошу помощи! Стоит задачка:
Есть таблица, в таблице строки
при выборе ячейки строки и протаскивания (выделения нескольких ячеек) по другим ячейкам этой же строки, собрать значения этих ячеек.
Как это сделать?

Заранее спасибо!!!

j0hnik 06.10.2018 16:11

<table border="1" id="tab">
		<tr><td>34,5</td><td>3,5</td><td>36</td><td>23</td></tr>
		<tr><td>34,5</td><td>3,5</td><td>36</td><td>23</td></tr>
		<tr><td>34,5</td><td>3,5</td><td>36</td><td>23</td></tr>
	</table>
	<script>
		tab.onmouseup = e => console.log(getSelection().toString().split(/\t+|\n+/));
	</script>

Sergey1986 06.10.2018 16:20

Спасибо за ответ, но есть одно но
выборка по одной строке необходимо, и выборка если выбрал ячеку то значение полностью ячейки и не часть, и там получается пусто значение можно получить...

Sergey1986 06.10.2018 16:24

т.е. не выделять значения в чейках, а выделять саму ячекй,

j0hnik 06.10.2018 16:52

<style>
		table{
			border-collapse: collapse;
		}
		td{
		border: 1px solid gray;
		}
	</style>


	<table id="tab">
		<tr><td>34,5</td><td>3,5</td><td>36</td><td>23</td></tr>
		<tr><td>34,5</td><td>3,5</td><td>36</td><td>23</td></tr>
		<tr><td>34,5</td><td>3,5</td><td>36</td><td>23</td></tr>
	</table>
	<script>
		tab.onmouseup = e => {
			var tds = document.querySelectorAll('#tab td');
			var start = getSelection().anchorNode.parentNode;
			stop = getSelection().focusNode;
			stop = stop.tagName == 'TD'? stop:stop.parentNode;
			if([].indexOf.call(tds, start)>[].indexOf.call(tds, stop)) [start,stop] = [stop,start];
			if(stop.parentNode != start.parentNode) {
				console.error('МИМО! Можно выделять только одну строку!');
				return;
			}
			var arr = [start.textContent];
			while(stop !=start) {
				start = start.nextElementSibling;
				arr.push(stop.textContent);
			}
			console.log(arr);
		};
	</script>

рони 06.10.2018 17:11

j0hnik,
выдели ячейки справа на лево и посмотри результат.

Sergey1986 06.10.2018 17:33

Да, там лезет ошибка,+ ошибка если выделение делать с двух строк

рони 06.10.2018 17:46

содержимое выделенных ячеек строки
 
Sergey1986,

<style>
        table{
            border-collapse: collapse;
        }
        td{
        border: 1px solid gray;
        }
    </style>


    <table id="tab">
        <tr><td>34,5</td><td>3,5</td><td>36</td><td>23</td></tr>
        <tr><td>34,5</td><td>3,5</td><td>36</td><td>23</td></tr>
        <tr><td>34,5</td><td>3,5</td><td>36</td><td>23</td></tr>
    </table>
    <script>
        var tds = [...tab.querySelectorAll('td')];
        function idx(td) {
          return tds.indexOf(td)
        }
        tab.onmouseup = e => {
            var start = getSelection().anchorNode.parentNode,
            tr = start.parentNode,
            stop = getSelection().focusNode;
            stop = stop.tagName == 'TD'? stop:stop.parentNode;
            start = idx(start);
            stop = idx(stop);
            var min = Math.min(start, stop),
                max = Math.max(start, stop),
                arr = [...tr.querySelectorAll('td')]
                .filter(e => idx(e) >= min && idx(e) <= max)
                .map(e => e.textContent);

            console.log(arr);
        };
    </script>

j0hnik 06.10.2018 17:53

Цитата:

Сообщение от рони (Сообщение 495891)
j0hnik,
выдели ячейки справа на лево и посмотри результат.

исправил


Часовой пояс GMT +3, время: 16:48.