Прочитав эту ветку и некоторые другие, я нашел следующее решение в javascript:
function trs_makelinks(trs) {
for (var i = 0; i < trs.length; ++i) {
if (trs[i].getAttribute("href") != undefined) {
var tr = trs[i];
tr.onclick = function () { window.location.href = this.getAttribute("href"); };
tr.onkeydown = function (e) {
var e = e || window.event;
if ((e.keyCode === 13) || (e.keyCode === 32)) {
e.preventDefault ? e.preventDefault() : (e.returnValue = false);
this.click();
}
};
tr.role = "button";
tr.tabIndex = 0;
tr.style.cursor = "pointer";
}
}
}
/* It could be adapted for other tags */
trs_makelinks(document.getElementsByTagName("tr"));
trs_makelinks(document.getElementsByTagName("td"));
trs_makelinks(document.getElementsByTagName("th"));
Чтобы использовать его, поместите href в tr / td / th, который вы хотите кликнуть, например: <tr href="http://stackoverflow.com">
.
И убедитесь, что приведенный выше скрипт выполняется после создания элемента tr (путем его размещения или использования обработчиков событий).
Недостатком является то, что TR не будет полностью вести себя как ссылки как с div'ами с display: table;
, и они не будут выбираться с клавиатуры или иметь текст состояния. Редактировать: я сделал клавиатуру навигация работает путем установки onkeydown, role и tabIndex, вы можете удалить эту часть, если нужна только мышь. Они не будут отображать URL в строке состояния при наведении.
Вы можете стилизовать ссылки TR с помощью селектора "tr [href]" CSS.