Вот плагин jQuery, основанный на решении Ника.
(function($) {
$.fn.linkWholeRows = function() {
// for each object
return this.each(function() {
// for each row
$(this).find('tbody tr').each(function() {
// get the first link's href
var href = $(this).find('td > a').attr('href');
// if none found then
if (href === undefined) {
return true; // continue
}
// wrap all cells with links that do not already have a link
$(this).children().not(':has(a)').each(function() {
$(this).contents().wrapAll('<a href="' + href + '" />');
});
// apply the row's height to all links
// in case that the cells' content have different heights
var height = $(this).children().css('height');
$(this).find('td > a').each(function() {
$(this).css('height', height);
// do not forget to apply display:block to the links
// via css to make it work properly
});
}); // each row
}); // each object
};
})(jQuery);
Ожидает, что строки будут обернуты в tbody. Высота установлена явно, так как оригинальное решение Ника не работает для меня в соседних ячейках с разной высотой.
Убедитесь, что a-элементы стилизованы под блоки. Если вы хотите применить отступы, примените его к элементам a вместо ячеек таблицы:
a {
display: block;
padding: 0.25em 0.5em;
}
tbody td { padding: 0; }
Просто позвоните
$('#your-table').linkWholeRows();
Надеюсь, это поможет. Ура,
Ричард