Получить координаты ячейки из <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, время: 19:24. |