请教个思路,最终效果上来讲,原生 JS 如何可以使整行表格 tr 内容被一个红框包起来?

2021-01-13 00:24:26 +08:00
 qazwsxkevin

情况:
1 、是在“增强”别人用数组绘制的动态表格,想在上面略加效果,
2 、情况不允许用 Jquery,主要原因是公司去公网的防火墙没有对 Jquery 的 CDN 地址放白名单。
3 、因为表格里面本身有些 td 格子自带了颜色(颜色有具体代表不同的信息),如果 onmouseover,onmouseout 去改颜色变高亮,反而影响了使用。。。
4 、所以就想到了弄个红色的框来表现鼠标落在了这行内容上。。。
5 、试着写了一下,对 tr 各种.style 参数调了一下,好像没那么简单?。。。
6 、脸厚问,可有现成的参考一下?

    //高亮 TR,目前只做了字体自动加粗,效果还不足够
    var tab = document.getElementById('dataShow');
    var trs = tab.getElementsByTagName('tr');//获取所有的 tr 标签
    for (var i = 0; i < trs.length; i++) {
        trs[i].onmouseover = function () {   //鼠标移动上事件
            if (this.style.fontWeight != "bolder") {
                this.style.fontWeight = "bolder";
            }
            }

        trs[i].onmouseout = function () {		//鼠标移出事件
            if (this.style.fontWeight == "bolder") {
                this.style.fontWeight = "normal";
            }
        }
    }
2232 次点击
所在节点    JavaScript
8 条回复
versionlin
2021-01-13 00:49:59 +08:00
用 css 不行么
VDimos
2021-01-13 01:16:52 +08:00
做表格样式的都是大神,尤其对 tr thead tbody 做样式的。这些标签样式很多都不能用
walpurgis
2021-01-13 01:20:47 +08:00
var tab = document.getElementById('dataShow');
tab.style.borderCollapse = 'collapse'; // tr 设置 border 需要 table 为 collapse

var trs = document.getElementsByTagName('tr');
for (let i = 0; i < trs.length; i++) {
trs[i].addEventListener('mouseenter', () => {
trs[i].style.border = '1px solid red'
})
trs[i].addEventListener('mouseleave', () => {
trs[i].style.border = ''
})
}
Mutoo
2021-01-13 07:25:34 +08:00
CSS 的 :hover + outline 非常容易实现
用 outline 有几个好处:
1) 很少被使用,不会跟原有的 border 冲突
2) 纯视觉效果,不改变布局
xuewuchen
2021-01-13 08:12:42 +08:00
呃。。我是新手不太明白啊,你下载一个 Jquery 到本地用不久可以了吗?
renmu123
2021-01-13 09:10:42 +08:00
@xuewuchen 华生你发现盲点了
devwolf
2021-01-13 09:22:21 +08:00
除了#说的 outline,我也经常用 box-shadow,总之是 border 样式的替代方案。
大 div 套小 div 漏一个框也是一种替代,不过看描述里“格子自带了颜色有具体代表不同的信息”,好像不能用大盒套小盒。

不知道能不能用反色(就是白字彩底),当然我有看到描述 4 提到的“红色框”需求,只是我这边做表格效果时也常用反色,提议一下
qazwsxkevin
2021-01-15 11:14:27 +08:00
没有来得及及时回复大家,说声谢谢了,最后我是这样完成的,应该是用了 CSS 吧。。。

```
//高亮 TR
var tab = document.getElementById('showTable');
var trs = tab.getElementsByTagName('tr');//获取所有的 tr 标签
for (var i = 0; i < trs.length; i++) {
if (i == 0) {
continue
}

trs[i].onmouseover = function () { //鼠标移动上事件
if (this.style.fontWeight != "bolder") {
this.style.fontWeight = "bolder";
this.style.outline = "#ff0e05 inset thick";
}
}

trs[i].onmouseout = function () { //鼠标移出事件
if (this.style.fontWeight == "bolder") {
this.style.fontWeight = "normal";
this.style.outline = "";
}
}
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744377

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX