Получить координаты ячейки из <table>
Имеется таблица на чистом php
Хочу получить координаты ячейки по нажатию на нее в окне браузера. Получается решить этот вопрос только двумя функциями, каждая из которых отдельно получает координаты строки и столбца. Необходимо реализовать получение координат с помощью одной функции. Когда пытаюсь объединить функции в одну, не получаю значение второй координаты:( Я только начинаю делать первые шаги, но есть догадки, что при onclick функция не получает второй параметр:help: :help: :help: Пример кода:
<table border="1">
<tr onclick="myPositionY(this)">
<td width="20" height="20" onclick="myPositionX(this)"></td>
<td width="20" height="20" onclick="myPositionX(this)"></td>
</tr>
function myPositionX(x) {
alert("Координаты X: " + x.cellIndex);
}
function myPositionY(y) {
alert("Координаты Y: " + y.rowIndex);
}
Помогите доступным языком разобраться чайнику :-? |
<table border="1">
<tr id="row">
<td width="20" height="20"></td>
<td width="20" height="20"></td>
</tr>
</table>
<script>
function myPosition() {
alert("Координаты X: " + this.cellIndex);
alert("Координаты Y: " + this.parentNode.rowIndex);
}
[].forEach.call(row.querySelectorAll('td'),node=>node.onclick=myPosition);
</script>
|
О странной приставке, которая кочует из одного ответа в другой...
Цитата:
Array.from(row.querySelectorAll('td')).forEach(node=>node.onclick=myPosition);
Перечисление ещё можно(и даже грамотней с точки зрения JavaScript) организовать вот так...
for(const node of row.querySelectorAll('td')) {
node.onclick=myPosition;
}
|
Цитата:
|
:write:
или так
[...row.querySelectorAll('td')].forEach()
|
На вкус все фломастеры разные =). ИМХО любой работающий вариант достоин права на жизнь.
Но вещать обработчик на каждую ячейку это уже слишком. Думаю разумнее воспользоватся всплытием событий и повесить один обработчик на таблицу. |
MallSerg,
а есть у вас какой-то минимально достаточный вариант делегирования? (в учебнике есть, хотелось бы ваш вариант или какой другой, если можно) |
Цитата:
с другой стороны, может случиться деоптимизация forEach, потому что вместо работы только с массивами она становится полиморфной. так что палка действительно о двух концах. старый добрый цикл всё равно быстрее и экономичнее ) а сам forEach давно есть в прототипе NodeList (который создается методом querySelectorAll) |
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 06:03. |