链接整个表格行? [复制]

Posted

技术标签:

【中文标题】链接整个表格行? [复制]【英文标题】:Link entire table row? [duplicate] 【发布时间】:2011-06-21 18:06:32 【问题描述】:

我知道可以用 CSS 链接整个表格单元格。

.tableClass td a
   display: block;

有没有办法将链接应用到整个表格行?

【问题讨论】:

【参考方案1】:

很遗憾,没有。不是 html 和 CSS。您需要一个 a 元素来创建链接,并且您不能将整个表格行包装在一个中。

您可以获得的最接近的方法是链接每个表格单元格。就我个人而言,我只会链接一个单元格并使用 javascript 使其余部分可点击。为了清晰起见,最好至少有一个看起来像链接的单元格,加上下划线等等。

这是一个简单的 jQuery sn-p 让所有带有链接的表格行都可以点击(它会查找第一个链接并“点击”它)

$("table").on("click", "tr", function(e) 
    if ($(e.target).is("a,input")) // anything else you don't want to trigger the click
        return;

    location.href = $(this).find("a").attr("href");
);

【讨论】:

@Aliester:使用 JS 方法应该没有间隙...... AFAIK。再说了,现在谁在细胞之间有空间呢 确认您错过了您正在关闭表格行的点击事件。 (= 对于大量元素,例如trdelegate 比使用live 效率更高 @蒋毅:你确定……? AFAIK live 只是将一个事件处理程序附加到文档级别并处理所有事情。现在,如果您有很多 处理程序live 可能会变得低效,因为它们基本上都会针对该类型的所有事件进行处理,但元素的数量应该没有区别。跨度> 确实,如果我单击不同的单元格,它就像一个链接一样工作,但只是刷新了同一页面。另外,是否也可以使它看起来像一个链接?也许添加一个游标:指向所有 TD 的指针?【参考方案2】:

我同意Matti。使用一些简单的javascript很容易做到。一个快速的 jquery 示例将是这样的:

<tr>
  <td><a href="http://www.example.com/">example</a></td>
  <td>another cell</td>
  <td>one more</td>
</tr>

$('tr').click( function() 
    window.location = $(this).find('a').attr('href');
).hover( function() 
    $(this).toggleClass('hover');
);

然后在你的 CSS 中

tr.hover 
   cursor: pointer;
   /* whatever other hover styles you want */

【讨论】:

它可能对我有用,但它是点击。它也可以像悬停时的链接一样吗?谢谢。 当然,我可能会在悬停时添加一个类,并在该类中添加您想要的任何样式。我会用一个例子更新我的帖子。 这个方案有很多问题。例如,您不能右键单击任何“其他”表格单元格并选择“复制链接”、“在新选项卡中打开”或其他任何内容。此外,您不能 shift-click/control-click/command-click 行使其在新选项卡中打开,因为 click 事件仍然会触发并导致 both 当前 导航到目标页面的新标签。 该解决方案非常适合我,尤其是在移动设备上,它不需要 Scytale 提到的任何“shift-click”缺点。 Here is a solution that only needs HTML and CSS. 希望对您有所帮助。【参考方案3】:

示例:http://xxjjnn.com/linktablerow.html

链接整行:

<table>
  <tr onclick="location.href='SomeWherrrreOverTheWebsiiiite.html'">**
    <td> ...content... </td>
    <td> ...content... </td>
    ...
  </tr>
</table>

如果您想在鼠标悬停时突出显示整行,那么:

<table class="nogap">
  <tr class="lovelyrow" onclick="location.href='SomeWherrrreOverTheWebsiiiite.html'">**
     ...
  </tr>
</table>

对 css 使用类似以下的内容,这将消除表格单元格之间的间隙并更改悬停时的背景:

tr.lovelyrow
  background-color: hsl(0,0%,90%);


tr.lovelyrow:hover
  background-color: hsl(0,0%,40%);
  cursor: pointer;


table.nogap
  border-collapse: collapse;

如果您使用的是 Rails 3.0.9,那么您可能会发现此示例代码很有用:

海有很多鱼,鱼有很多鳞片,这里是app/view/fish/index.erb的sn-p

<table>
<% @fishies.each do |fish| %>
  <tr onclick="location.href='<%= sea_fish_scales_path(@sea, fish) %>'"> 
    <td><%= fish.title %></td>
  </tr>
<% end %>
</table>

@fishies 和 @sea 在 app/controllers/seas_controller.rb 中定义

【讨论】:

该问题与rails无关,您答案的相关部分不依赖于它。 请尽量避免 onclick 和其他 on* 属性,它们是不好的样式,因为它们破坏了标记和逻辑之间的分离。 onclick 的问题是它不适用于“在新标签页中打开” :hover 可以省略,或者你甚至可以内联样式,比如&lt;tr style="cursor:pointer" onclick="location.href='url'"&gt;【参考方案4】:

我觉得最简单的解决方案是不使用 javascript,只需将链接放在每个单元格中(前提是您的单元格之间没有大量沟壑或真的认为边界线)。拥有你的 CSS:

.tableClass td a
   display: block;

然后为每个单元格添加一个链接:

<table class="tableClass">
    <tr>
        <td><a href="#link">Link name</a></td>
        <td><a href="#link">Link description</a></td>
        <td><a href="#link">Link somthing else</a></td>
    </tr>
</table>

无聊但干净。

【讨论】:

【参考方案5】:

使用::before 伪元素。这样只有您不必处理 Javascript 或为每个单元格创建链接。使用以下table 结构

<table>
  <tr>
    <td><a href="http://domain.tld" class="rowlink">Cell</a></td>
    <td>Cell</td>
    <td>Cell</td>
  </tr>
</table>

在这种情况下,我们所要做的就是在所需链接 (.rowlink) 上使用 ::before 创建一个跨越整个表格宽度的块元素。

table 
  position: relative;


.rowlink::before 
  content: "";
  display: block;
  position: absolute;
  left: 0;
  width: 100%;
  height: 1.5em; /* don't forget to set the height! */

demo

::before 在演示中以红色突出显示,因此您可以看到它在做什么。

【讨论】:

这是一个比上述所有解决方案都干净得多的解决方案。好奇:你会如何为tdpadding-top 调整这个? @eirikir 将负数 margin-top 添加到 .rowlink::before 等于 tdpadding-top 对我有用。 好东西,迄今为止我见过的最好的解决方案。 看起来很不错。最好不要依赖javascript!一个警告:从标记的角度来看,其他单元格的内容不在锚点中。在某些情况下,这可能会影响可用性(可能还有 SEO)。而且它在非 CSS 代理中不起作用。【参考方案6】:

还取决于您是否需要使用表格元素。您可以使用 CSS 模拟表格并将 A 元素作为行

<div class="table" style="width:100%;">
  <a href="#" class="tr">
    <span class="td">
      cell 1
    </span>
    <span class="td">
      cell 2
    </span>
  </a>
</div>

css:

.tabledisplay:table;
.trdisplay:table-row;
.tddisplay:table-cell;
.tr:hoverbackground-color:#ccc;

【讨论】:

开箱即用的好想法。 OP 没有特别要求表的语义。但是,这不是真正的表格数据的解决方案。【参考方案7】:

要链接整行,你需要在你的行上定义onclick函数,即&lt;tr&gt;element,并在tr元素的CSS中定义一个鼠标hover,使鼠标指针指向一个典型的网页中的点击手:

在表中:

<tr onclick="location.href='http://www.google.com'">
<td>blah</td>
<td>blah</td>
<td><strong>Text</strong></td>
</tr>

在相关的 CSS 中:

tr:hover 
cursor: pointer;

【讨论】:

【参考方案8】:

我认为这可能是最简单的解决方案:

<tr onclick="location.href='http://www.mywebsite.com'" style="cursor: pointer">
<td>...</td>
<td>...</td>
</tr>

cursor CSS 属性设置光标的类型,如果有的话,在什么时候显示 鼠标指针在一个元素上。

内联 css 定义 对于该元素,光标将被格式化为 pointer,因此您不需要“悬停”。

【讨论】:

以上是关于链接整个表格行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

复制/粘贴可变编号行(自动填充)

如何将EXCEL中的多个表格复制到另一个表格中

VBA复制行高?

公众号里面的表格怎么复制

Excel 表格验证/公式未复制到新表格行

将最后一个表格行的选定值复制到新行