表格行列高亮显示的实现(二)

前面的一篇是通过 js 的鼠标移上移出的事件(mouseover,mouseout)实现的,下面这个是纯 CSS 实现表格行列同时高亮显示的实现

table {
  overflow: hidden;
}

tr:hover {
  background-color: #ffa;
}

td, th {
  position: relative;
}
td:hover::after,
th:hover::after {
  content: "";
  position: absolute;
  background-color: #ffa;
  left: 0;
  top: -5000px;
  height: 10000px;
  width: 100%;
  z-index: -1;
}

效果图
这里写图片描述
这是通过td:hover配合::before或::after,并且将其高度设置无限高,同时改变::after或::before的z-index值。重要的一点,需要给table设置一个overflow:hidden,将伪元素溢出的高度截取掉。

HTML 的 colgroup 标签实现
在 table 中添加 colgroup 标签,看下面代码
定义样式

.hover { background-color: #ffa; }

Html 代码

<table>
    <colgroup></colgroup>
    <colgroup></colgroup>
    <colgroup></colgroup>
    <colgroup></colgroup>
    <colgroup></colgroup>
    <thead>
        <tr>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
        </tr>
    </thead>
    <tbody>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        </tbody>
</table>

js 代码

$("table").delegate('td','mouseover mouseleave', function(e) {
    if (e.type == 'mouseover') {
      $(this).parent().addClass("hover");
      $("colgroup").eq($(this).index()).addClass("hover");
    }
    else {
      $(this).parent().removeClass("hover");
      $("colgroup").eq($(this).index()).removeClass("hover");
    }
});

这样也可以实现上面同样的代码, 效果是一样的。
标签用于对表格中的列进行组合,以便对其进行格式化。
如需对全部列应用样式, 标签很有用,这样就不需要对各个单元和各行重复应用样式了。
标签只能在 table 元素中使用。
主流浏览器都支持 标签,只是在 Firefox、Chrome 以及 Safari 仅支持 colgroup 元素的 span 和 width 属性。

jQuery 的 live 方法
jQuery 的live 方法也能实现同样的效果,只是 live 方法在 jQuery 1.7 版本后就废弃了,官方建议使用 .on() 来添加事件处理。使用旧版本的用户,应该优先使用 .delegate() 来替代 .live()。
实现的代码如下:

$('td').live('mouseover', function(){
    var i = $(this).prevAll('td').length;
    $(this).parent().addClass('hover')
    $($cols[i]).addClass('hover');

}).live('mouseout', function(){
    var i = $(this).prevAll('td').length;
    $(this).parent().removeClass('hover');
    $($cols[i]).removeClass('hover');
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值