Это очень легко сделать с помощью свойства target
объекта event
:
$('#mytable').click(function(e) {
var tr = $(e.target).parent('tr');
var x = $('tr', this).index(tr);
var y = tr.children('td').index($(e.target));
alert(x + ',' + y);
});
Этот подход позволяет привязать только один обработчик событий ко всей таблице, а затем выяснить, какая ячейка таблицы была нажата. Это известно как делегирование событий и может быть намного более эффективным в правильной ситуации, и это отвечает всем требованиям. Используя это, вы избегаете привязки события к каждому <td>
, и это не требует жестких кодов координат. Итак, если ваш стол выглядит так:
<table id='mytable'>
<tr>
<td>hi</td>
<td>heya</td>
</tr>
<tr>
<td>boo</td>
<td>weee</td>
</tr>
</table>
Он сообщит координаты при нажатии. Вы можете сделать что угодно с этим. :)
Если вы считаете, что производительность слишком низкая (в зависимости от размера таблицы), вам придется прибегнуть к жесткому или их сочетанию, возможно, только к жесткому кодированию индекса <tr>
, поскольку самое медленное получение, а затем динамическое получение индекса <td>
. Наконец, если весь этот бизнес координат совершенно не нужен и вам действительно нужна ссылка на нажатой <td>
, вы просто сделаете это:
$('#mytable').click(function(e) {
var td = $(e.target);
// go crazy
});