Ну, самое короткое (сверх) упрощение:
var theCell = $('td:contains("MVC")');
col = theCell.parent().children().index(theCell);
row = theCell.parent().parent().children().index(theCell.parent());
Обратите внимание, возвращаемые индексы начинаются с нуля. По сути, сначала вы находите интересующую клетку. Для столбца вы поднимаетесь на уровень в DOM до <tr>
, получаете все дочерние элементы (которые в этом случае будут потомками <td>
s и <th>
s) и находите позицию интересующего элемента в этом наборе. Для строки вы поднимаетесь до, в данном случае, <tbody>
, получаете все строки и находите положение строки <td>
, представляющей интерес.
Как вы понимаете, изменения в структуре таблицы изменяют возможные результаты. Однако, если вы программно используете индексы позже так же, как вы их получили, вы можете вернуться к той же ячейке. Я говорю об этом, потому что, если вы каким-то образом используете индексы визуально в пользовательском интерфейсе, вам, возможно, придется усложнить и учесть промежутки, <tbody>
против <tbody>
и т. Д.
Не знаю, эффективнее ли это, чем ответ медера. Но это, безусловно, гораздо более ремонтопригодны! :)