将HTML表格行包装在标签中
将HTML表格行包装在标签中
是否可能将整个表格行包装在标签中?我希望整行都是可点击的链接。\n如果我尝试以下操作,链接会在表格之上和之外呈现:\n如下所示:\n
value | value |
value | value |
\n呈现如下:\n
value | value |
value | value |
问题的原因是希望在HTML表格的行中包裹标签,使得整行都可以点击。然而,当文本换行时,上述的解决方法就不再适用了,因为标签无法填充整个单元格。
解决方法是使用CSS来将标签转换为块级元素,并设置负的边距来消除不可点击的间隙。具体代码如下:
td > a { display: block; margin: -4px; /* 负的边距,与padding相等 */ }
这样,标签就会占据整个
- 不适用的解决方法:[https://jsfiddle.net/950c1284/](https://jsfiddle.net/950c1284/)
- 适用的解决方法:[https://stackoverflow.com/questions/3966027#15801081](https://stackoverflow.com/questions/3966027#15801081)
问题的出现原因是因为浏览器遵循W3C规范,只允许<table>
标签的直接子元素是<tr>
标签。为了解决这个问题,可以有以下几种方法:
第一种方法是在每个<td>
标签内部添加一个<a>
标签,指向相同的URL,如下所示:
<table> <tr> <td> <a href="http://url/stuff"> 第一列 </a> </td> <td> <a href="http://url/stuff"> 第二列 </a> </td> </tr> </table>
第二种方法是使用JavaScript在<tr>
标签上绑定一个onClick
事件处理程序。以下是一个使用jQuery的示例:
$('table tr').click(function() { window.location = 'http://location/here'; });
第三种方法是使用事件委托(适用于jQuery 1.7+):
$('table').on('click', 'tr', function() { window.location = 'http://location/here'; });
需要注意的是,使用JavaScript的解决方法可能会有一些问题。用户无法使用Ctrl键+单击或Shift键+单击在新标签页或新窗口中打开链接。可以通过捕获点击事件并检测event.metaKey
或event.ctrlKey
来解决这个问题,但有时可能会被弹出窗口拦截器阻止。详情可以参考stackoverflow.com/a/2445640/436014。
问题:如何将HTML表格行包装在标签中?
原因:使用每个
解决方法:可以尝试使用aria-role来使其对屏幕阅读器更友好。如果在邮件中使用HTML,可能无法使用JS,并且许多客户端需要内联样式(在每个HTML标记中使用style="")。如果这个解决方法仍然不起作用,可以尝试使用具有固定宽度和浮动的