Я не могу установить свою строку таблицы как ссылку на что-то. Могу использовать только css и html. Я пробовал разные вещи от div in row к чему-то другому, но все еще не могу заставить его работать.
Ответы:
У вас есть два способа сделать это:
Используя 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;
}
Вот простая демонстрация второго примера: DEMO
Я сделал себе кастомную функцию jquery:
<tr data-href="site.com/whatever">
$('tr[data-href]').on("click", function() {
document.location = $(this).data('href');
});
Легко и идеально подходит для меня. Надеюсь, это вам поможет.
(Я знаю, что OP хочет только CSS и HTML, но рассмотрите jQuery)
Согласовано с Мэттом Кантором с использованием атрибута данных. Отредактированный ответ выше
data-href
или что-то подобное.
<table class='tr_link' >
и передать его .tr_link{cursor:pointer}
в CSS для наилучшего использования.
tr[data-href] { cursor: pointer }
в свои таблицы стилей
Если вы используете браузер, который его поддерживает, вы можете использовать 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>
Если вам нужно использовать таблицу, вы можете поместить ссылку в каждую ячейку таблицы:
<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 */
}
Обычный способ - присвоить некоторый JavaScript onClick
атрибуту TR
элемента.
Если вы не можете использовать JavaScript, вы должны использовать трюк:
Добавьте одну и ту же ссылку в каждую TD
строку (ссылка должна быть самым внешним элементом в ячейке).
Превратите ссылки в элементы блока: a { display: block; width: 100%; height: 100%; }
Последний заставит ссылку заполнить всю ячейку, поэтому щелчок в любом месте вызовет ссылку.
Вы не можете обернуть <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>
document.querySelector('tr[url]').addEventListener("mousedown", function(e){ var click = e.which; var url = this.getAttribute("url"); if(url){ if(click == 1){ window.location.href = url; } else if(click == 2){ window.open(url, '_blank'); window.focus(); } return true; } });
Когда я хочу смоделировать <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 href="http://stackoverflow.com">
. И убедитесь, что приведенный выше сценарий выполняется после создания элемента tr (путем его размещения или использования обработчиков событий).
Обратной стороной является то, что TR полностью не будет вести себя как ссылки, как с div с Изменить: я сделал работу с клавиатурой, установив onkeydown, role и tabIndex, вы можете удалить эту часть, если нужна только мышь. Однако они не будут отображать URL-адрес в строке состояния при наведении курсора.display: table;
, и они не будут выбираться с клавиатуры или иметь текст состояния.
Вы можете стилизовать TR ссылки с помощью селектора 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 устанавливает переменные в SESSIONS, которые страница, на которую вы собираетесь, может читать и действовать.
Мне бы очень хотелось, чтобы публикация была прямо у окна, но я не думаю, что это возможно.
Можете ли вы добавить к строке тег A?
<tr><td>
<a href="./link.htm"></a>
</td></tr>
Вы об этом спрашиваете?