15 ответов:
у вас есть два способа сделать это:
С помощью javascript:
<tr onclick="document.location = 'links.html';">С помощью якоря:
<tr><td><a href="">text</a></td><td><a href="">text</a></td></tr>Я сделал вторую работу, используя:
table tr td a { display:block; height:100%; width:100%; }чтобы избавиться от мертвого пространства между колоннами:
table tr td { padding-left: 0; padding-right: 0; }вот простая демонстрация второго примера:демо
Я сделал себе пользовательскую функцию jquery:
Html
<tr data-href="site.com/whatever">jQuery
$('tr[data-href]').on("click", function() { document.location = $(this).data('href'); });легкий и идеально подходит для меня. Надеюсь, это поможет вам.
(Я знаю, что OP хочет только CSS и HTML, но рассмотрим jQuery)
Edit
согласился с Мэттом Кантором, используя данные attr. Отредактированный ответ выше
если вы находитесь в браузере, который его поддерживает, Вы можете использовать CSS для преобразования
<a>в таблице строку:.table-row { display: table-row; } .table-cell { display: table-cell; } <div style="display: table;"> <a href="..." class="table-row"> <span class="table-cell">This is a TD... ish...</span> </a> </div>конечно, вы ограничены тем, что не помещаете элементы блока внутрь
<a>. Вы также не можете смешивать это с обычным<table>
обычный способ-назначить некоторый JavaScript для на
TRэлемент.если вы не можете использовать JavaScript, то вы должны использовать хитрость:
добавить ту же ссылку на каждый
TDтой же строки (ссылка должна быть самым внешним элементом в ячейке).превратить ссылки в элементы блока:
a { display: block; width: 100%; height: 100%; }последний заставит ссылку заполнить всю ячейку, поэтому нажмите в любом месте будет вызывать ссылку.
если вы обязательно используйте таблицу, вы можете поместить ссылку в каждую ячейку таблицы:
<table> <tbody> <tr> <td><a href="person1.html">John Smith</a></td> <td><a href="person1.html">123 Fake St</a></td> <td><a href="person1.html">90210</a></td> </tr> <tr> <td><a href="person2.html">Peter Nguyen</a></td> <td><a href="person2.html">456 Elm Ave</a></td> <td><a href="person2.html">90210</a></td> </tr> </tbody> </table>и сделать ссылки заполнить все ячейки:
table tbody tr td a { display: block; width: 100%; height: 100%; }если вы можете использовать
<div>s вместо таблицы, ваш HTML может быть намного проще, и вы не получите "пробелы" в ссылках, между ячейками таблицы:<div class="myTable"> <a href="person1.html"> <span>John Smith</span> <span>123 Fake St</span> <span>90210</span> </a> <a href="person2.html"> <span>Peter Nguyen</span> <span>456 Elm Ave</span> <span>90210</span> </a> </div>вот CSS, который идет с
<div>способ:.myTable { display: table; } .myTable a { display: table-row; } .myTable a span { display: table-cell; padding: 2px; /* this line not really needed */ }
вы не можете обернуть
<td>элемент<a>- тег, но вы можете выполнить аналогичную функциональность с помощьюonclickсобытие для вызова функции. Пример найден здесь, что-то вроде этой функции:<script type="text/javascript"> function DoNav(url) { document.location.href = url; } </script>и добавьте его к своей таблице следующим образом:
<tr onclick="DoNav('http://stackoverflow.com/')"><td></td></tr>
ответ сэр Уильям подходит мне лучше всего. Я улучшил Javascript с поддержкой горячей клавиши Ctrl + LeftClick (открывает страницу в новой вкладке). Событие
ctrlKeyиспользуется ПК,metaKeyпо Mac.Javascript
$('body').on('mousedown', 'tr[url]', function(e){ var click = e.which; var url = $(this).attr('url'); if(url){ if(click == 2 || (click == 1 && (e.ctrlKey || e.metaKey))){ window.open(url, '_blank'); window.focus(); } else if(click == 1){ window.location.href = url; } return true; } });пример
Я знаю, что на этот вопрос уже дан ответ, но мне все еще не нравится какое-либо решение на этой странице. Для людей, которые используют JQuery я сделал окончательное решение, которое позволяет дать строку таблицы почти такое же поведение, как
<a>тег.Это мое решение:
jQueryвы можете добавить это, например, в стандартный включенный файл javascript
$('body').on('mousedown', 'tr[url]', function(e){ var click = e.which; var url = $(this).attr('url'); if(url){ if(click == 1){ window.location.href = url; } else if(click == 2){ window.open(url, '_blank'); window.focus(); } return true; } });HTMLтеперь вы можете использовать это на любом
<tr>элемент внутри вашего HTML<tr url="example.com"> <td>value</td> <td>value</td> <td>value</td> <tr>
Это избавляет вас от необходимости дублировать ссылку в tr-просто выловите ее из первого a.
$(".link-first-found").click(function() { var href; href = $(this).find("a").attr("href"); if (href !== "") { return document.location = href; } });
когда я хочу сымитировать
<tr>со ссылкой, но соблюдая стандарты html, я делаю это.HTML:
<table> <tr class="trLink"> <td> <a href="#">Something</a> </td> </tr> </table>CSS:
tr.trLink { cursor: pointer; } tr.trLink:hover { /*TR-HOVER-STYLES*/ } tr.trLink a{ display: block; height: 100%; width: 100%; } tr.trLink:hover a{ /*LINK-HOVER-STYLES*/ }таким образом, когда кто-то идет с его мышью на TR, все строки (и это ссылки) получает стиль наведения, и он не может видеть, что есть несколько ссылок.
Надежда может помочь кому-то.
Скрипка здесь
//Style .trlink { color:blue; } .trlink:hover { color:red; } <tr class="trlink" onclick="function to navigate to a page goes here"> <td>linktext</td> </tr>что-то в этом роде, возможно? Хотя он использует JS, но это единственный способ сделать строку (tr) кликабельной.
Если у вас нет одной ячейки с тегом привязки, который заполняет всю ячейку.
и затем, вы не должны использовать таблицу в любом случае.
после прочтения этой темы и некоторых других я придумал следующее решение в 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 (путем его размещения или с помощью обработчиков событий).
недостатком является то, что он не будет полностью заставлять TRs вести себя как ссылки, как с divs сEdit: я сделал клавиатурную навигацию, установив onkeydown, role и tabIndex, вы можете удалить эту часть, если нужна только мышь. Однако они не будут показывать URL-адрес в строке состояния при наведении курсора.display: table;, и они не будут клавиатуры-по выбору или текст статуса.вы можете создать особый стиль ссылки TRs с помощью селектора CSS " tr[href]".
У меня есть другой способ. Особенно, если вам нужно отправить данные с помощью jQuery
$(document).on('click', '#tablename tbody tr', function() { var test="something"; $.post("ajax/setvariable.php", {ID: this.id, TEST:test}, function(data){ window.location.href = "http://somepage"; }); });Set variable устанавливает переменные в сеансах, которые страница, которую вы собираетесь читать и действовать.
Я люблю способ размещения прямо на месте окна, но я не думаю, что это возможно.
Спасибо за это. Вы можете изменить значок наведения, назначив класс CSS для строки, например:
<tr class="pointer" onclick="document.location = 'links.html';">и CSS выглядит так:
<style> .pointer { cursor: pointer; } </style>
можете ли вы добавить тег A в строку?
<tr><td> <a href="./link.htm"></a> </td></tr>это то, что ты просишь?
Comments