用vue 自定义指令解决表格td内容元素设置z-index不生效问题

Element UI el-table 合计行深度定制:从单元格合并到复杂场景实战 在前端开发中,表格组件是数据展示与交互的核心。Element UI 的 el-table 以其丰富的功能和良好的扩展性,成为构建后台管理系统和数据报表的常用选择。其内置的合计行功能通过 show-summary 属性和 summary-method 方法,为数据汇总提供了基础支持。然而,在实际工程实践中,面对复杂的业务需求,如单元格合并、样式深度定制、与固定列或动态数据的兼容等,默认机制往往力不从心。理解表格的 DOM 渲染原理和 CSS 布局是解决这些问题的关键。通过巧用 summary-method 结 阅读详情

问题描述

在表格内使用表单时,如果表单控件在表格每一行的高度范围内,那么它的错误提示就会被遮挡看不到。(我的UI库是用的iview)
无法显示表单提示内容

这是一直存在的问题,以前的解决方法:

  1. 将表单控件的错误提示距离留出来,把表格每一行撑高。这样表格每两行之间会间隔很大,还可能会出现一行的内容对不齐的问题
  2. 把错误提示放到表单控件里来,这样有时又影响查看内容。

原本想着反正我们是中台系统,这次还是准备用第一种方式继续蒙混过关,但是没想到这次的需求表格是带颜色的,加上颜色第一种方案缺点就太明显了,并且产品又不接受第二种方案,该改还是得要去改啊。

分析

1. z-index

像这种被遮挡的内容,第一时间想到的就是设置z-index提升层级,但是无论我怎么设置,z-index都等于9999了也不生效,真是令人头秃。
在百般搜索后,看到有人说: “表格的z-index不管怎么设置,<td>的层级都是高于<td>的内容元素的层级”。
那么我这设置z-index的方案是彻底宣布失败了。

2. position

不过这倒是令我想通了日期选择器的下拉部分为什么能正常显示。

可以看到日期选择器的选择部分是生成在<body>里的,相对定位自然是相对于<body>,那么可以浮在表格上就很正常。(其实我之前想拿日期选择器做参考已经看过了,但是一直没回过味来,现在才一下想通)
日期选择器下拉元素

让我重新生成元素这是不可能的,但是使用定位又给了我一个思路:

如果我把错误提示的定位参考从它的父元素改到<body>,那是否也能如 日期选择器的选择部分那样通过计算到<body>的位置而展示呢?


好的!那就先在浏览器上修改尝试一下。

先取消错误提示(.ivu-form-item-error-tip)父元素(.ivu-form-item-content)的绝对定位,再修改.ivu-form-item-error-tip的top、left属性为0,方便查找。这时.ivu-form-item-error-tip找到设置了绝对定位的.ivu-table-wrapper,已经改变位置了。
修改相对定位参考

再修改一下.ivu-form-item-error-tip的top属性,发现能正常显示在两行表格之间,证明这个方案没问题,可以照这样去做。
调整top属性值

修改代码,测试效果

要操作多个元素,且方法都是一样的,那么用vue的自定义指令是最方便的。(vue自定义指令不多做赘述,参考官网:https://cn.vuejs.org/v2/guide/custom-directive.html)

定义一个指令v-tableformerrorposition,在错误提示出现时修改对应的几个元素的样式,并注册到vue中

...省略...
Vue.directive('tableformerrorposition', {
  update: function(el) {
    const classList = el.getAttribute('class').split(' ')
    // 判断是否出现错误提示
    if (classList.includes('ivu-form-item-error')) {
       // 这是ivu-form-item-content
       let contentEl = el.children[0]
       // 这是ivu-form-item-error-tip
       let errTipEl = contentEl.children[1]
      // 在浏览器测试时找到`<table>`去设置定位还是太麻烦,可以尝试找到父级表格`<td>`去修改定位,这里就直接找到<td>元素
      let parentTdEl = el.parentNode.parentNode.parentNode
      
      // ivu-form-item-content取消绝对定位
      contentEl.setAttribute('style', 'position:static;')
      // <td>加上绝对定位
      parentTdEl.setAttribute('style', 'position:relative;')
      // ivu-form-item-error-tip调整相对定位距离
      errTipEl.setAttribute('style', 'top:44px;')
    }
  },
})
...省略...

在页面上使用指令

...省略...
<Form ref="chargForm" :model="chargForm" :label-width="120">
  <Table class="table-list" :columns="chargColumns" max-height="600" :data="chargForm.list">
    <template slot-scope="{ index }" slot="firstMonths">
      <FormItem
       label=""
       :label-width="0"
       :prop="'list.' + index + '.firstMonths'"
       v-tableformerrorposition 
	  >
        <Input v-model="xxx" />
	  </FormItem>
	</template>
  </Table>
</Form>
..省略...

优化

上面代码仍可以优化。

  1. 错误提示虽然会显示、隐藏,但是它的位置是不会变的,而且只要设置了一次它的样式,并不需要再变回到以前的样式。 所以我们不需要在update里去修改,只需要在insert(使用insert时要保证父元素存在)里执行一次绑定修改即可。

  2. 这里要找到3个元素出来修改,其实可以写好一个class,找到父元素<td>,给它加上这个class就可以了

  3. 如果怕有的表单层级一样,还可以传入参数,根据参数递归去找要修改的父元素(这一点我没优化)

...省略...
Vue.directive('tableformerrorposition', {
  inserted(el) {
    // 找到<td>元素
    let parentTdEl = el.parentNode.parentNode.parentNode
    parentTdEl.className += ' update-form-item-error-position'
  },
})
...省略...

看看最后效果:
在这里插入图片描述

现代Web开发中Table表格的完整指南:从基础标签到组件化实践 在Web前端开发中,数据展示是核心需求之一。HTML Table(表格)作为原生语义化标签,是处理二维关系数据的终极利器。其原理在于通过`<table>`、`<tr>`、`<td>`、`<th>`等标签构建清晰的行列结构,并可通过`<thead>`、`<tbody>`、`<tfoot>`进行逻辑分组,实现对结构化数据的高效、可访问性呈现。Table的技术价值在于其原生的语义化特性,不仅利于SEO,更能为屏幕阅读器等辅助工具提供明确上下文,这是使用`<div>`模拟表格无法比拟的。在现代Web开发中,Tabl 阅读详情

相关推荐

Vue Grid组件深度设计:状态管理与性能优化实战

Grid 组件远不止是数据渲染的表格容器,而是融合响应式状态管理、DOM 行为控制与性能边界的前端核心业务单元。其本质是围绕 Pagination、Fixed Header、rowsPerPage 等关键能力构建可预测、可维护、可扩展的数据视图治理系统。通过分层架构(数据适配→状态管理→渲染计算→视图呈现),实现跨数据源兼容、暗色模式热插拔、离线编辑无缝集成等工程价值。适用于中后台系统中高交互、多维度、长生命周期的列表场景,尤其解决排序丢失、滚动卡顿、列宽错位、打印异常等 Vue 项目高频痛点。

weixin_34198881的博客 385

Element UI表格fixed列错位问题:从原理到实战解决方案

在前端开发中,表格组件是数据展示的核心工具,其布局稳定性直接影响用户体验。表格错位问题本质上是浏览器渲染机制与CSS盒模型计算不一致导致的视觉偏差,常见于动态数据更新、异步渲染等场景。理解DOM渲染流程、CSS定位原理及框架生命周期是解决此类问题的关键。在Vue技术栈中,Element UI的el-table组件通过拆分多个独立表格实例实现固定列功能,这要求各实例间的尺寸同步必须精确。本文聚焦el-table fixed列错位这一典型问题,深入剖析其产生机制,并提供从强制重新布局、CSS规范化到组件强制刷新

weixin_33881140的博客 379

XPath定位原理与实战:从基础语法到Web自动化高效应用

在Web自动化测试与数据爬取领域,元素定位是核心技术环节。XPath作为一种在XML/HTML文档中导航与查询节点的语言,其核心原理是将文档解析为DOM树,通过路径表达式进行节点筛选与匹配。这项技术的价值在于提供了超越简单路径描述的强大查询能力,能够精准定位复杂嵌套结构中的元素,从而显著提升自动化脚本的稳定性和灵活性。在实际的工程实践中,XPath广泛应用于Selenium、Playwright等主流自动化框架,是处理动态页面、复杂表单及数据提取场景的关键工具。掌握XPath的编写与调试,例如利用xpath

weixin_34405354的博客 361

CSS基础(七):z-index详解

概念 z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。 层级关系的比较 1. 对于同级元素,默认(或position:static)情况下文档流后面的元素会覆盖前面的。 2. 对于同级元素,position不为static且z-index存在的情况下z-index大的元素会覆盖z-index小的元素,即z-index越大优先级越高...

weixin_34120274的博客 1041

122.在 Vue3 中使用 OpenLayers 实现图层层级控制(zIndex)显示与设置详解

在地图开发中,我们常常需要多个图层叠加显示,比如:底图(OSM、天地图等)热力图层标注图层特效图层这时候,如果你不设置好图层的显示顺序(zIndex),可能会出现:❌ 重要内容被挡住❌ 交互区域点击不到✅ 设置好 zIndex,就像给每一层贴上「显示顺序标签」,让图层按预期叠加展示图层的层级控制,是地图开发中的基础知识,但也是容易忽略的点。希望这篇文章能帮助你理解并灵活使用zIndex,让地图图层不再“互相打架”!🤝📢 如果觉得这篇文章对你有帮助,欢迎。

小彭的博客 758

【第六届起重机创意大赛国一作品——资料分享】

文章目录前言一、比赛内容分析二、确定方案与作品模型1.方案简图2.作品模型三、电控部分控制思路单片机选择与资源分配拓展板的设计接线与走线代码分享总结

qq_19308801的博客 7770

找到页面当前元素z-index最高的数值

三分钟学会如何获取当前页面最高z-index? 有什么用?

秋来九月八 3093

Pixhawk+OpenMV实战:如何用Apriltag实现无人机自动降落(附避坑指南)

本文详细介绍了如何利用Pixhawk飞控和OpenMV摄像头,通过Apriltag视觉标签实现无人机的精准降落系统。从硬件搭建、参数配置到视觉处理代码优化,提供了完整的实战指南和避坑建议,帮助开发者快速实现厘米级精度的自动降落功能。

weixin_27076351的博客 473

vue z-index层级显示问题

vue z-index层级显示问题

空空墓志铭的博客 3683

BEVFusion实战:从零搭建LiDAR-Camera融合的3D目标检测环境(附避坑指南)

本文提供了BEVFusion实战指南,详细讲解如何从零搭建LiDAR-Camera融合的3D目标检测环境。内容涵盖环境配置、数据预处理、模型训练与性能优化等关键步骤,并附有实用的避坑技巧,帮助开发者高效部署这一先进的BEV感知算法。

p4q5r6s7t的博客 512

FAST-LIO 实战:从 LI-Init 标定到 YAML 配置全解析

本文详细解析了FAST-LIO算法中LI-Init标定的关键步骤与YAML配置优化技巧。从激光雷达与IMU的时空标定原理到实战参数调优,提供了一套完整的解决方案,帮助开发者解决点云畸变、建图漂移等常见问题,提升SLAM系统在动态环境中的稳定性和精度。

weixin_42651281的博客 321

vue-z-index

它类似于纸张堆叠的顺序,决定了元素在垂直层面上的显示顺序。具体来说,z-index的值决定了哪个元素位于最前面,哪个元素位于后面。具有较高z-index值的元素会覆盖具有较低z-index值的元素。

a18861856219的博客 916

强化学习 | Multi Agents | Trust Region | HATRPO | HAPPO

ICLR2022多智能体论文,将trust region推广到MA上,保证单调递增。学习博客,共7k字,纯手敲。含大量手写笔记。

111辄的博客 1万+

vue+html实现固定表头及固定列(固定复制表头和指定列可以根据同样思想设置)

vue固定表头和列 这篇文章基于原生html+vue实现表头固定和列固定,如果是使用了如element-ui等一般已经有相应实现组件。 1.基本思想 通过使用css中的transform(可以平移或旋转等),结合对scroll滚动条的监听实现固定表头和列。首先监听scroll滚动,获取其向上或向下滚动的距离,然后通过transform将表头上下平移,或者将制定列左右平移相应距离即可。 步骤 1.创...

qq_23967965的博客 2117

从传感器到执行-智能家居 Agent 的感知-决策-执行闭环

本文提出了一种面向智能家居的感知型Agent架构,通过"感知-决策-执行"的闭环系统实现智能化控制。感知模块整合多源传感器数据,决策模块基于规则或机器学习模型生成控制策略,执行模块完成设备操作。系统能够实时监测环境参数和用户状态,自动调节温度、照明等设备,提升家居舒适度。该架构可扩展为多模态感知与强化学习相结合的智能系统,为智慧家居发展提供技术基础。

一键难忘的博客 1114

华为OD机考双机位C卷 - 螺旋数字矩阵 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 数字螺旋矩阵(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 3202

CSS表格样式深度解析:从border-collapse到企业级数据表格实战

在Web前端开发中,表格(Table)是展示结构化数据的核心元素,尤其在后台管理系统、数据仪表盘等场景不可或缺。其样式控制涉及一套精密的层叠系统,核心在于理解`<table>`、`<tr>`、`<td>`、`<th>`四个标签的层级关系与样式继承原理。掌握`border-collapse`(边框合并)与`table-layout`(布局算法)等关键属性,能有效解决边框重叠、性能优化等工程问题。通过`position: sticky`实现粘性表头、利用`:nth-child()`创建斑马纹、结合`overfl

weixin_34387468的博客 464

【FPGA教程案例89】编译码2——使用vivado核实现RS信道编译码

RS编码,又称里所码,即Reed-solomon codes,是一种前向纠错的信道编码,对由校正过采样数据所产生的多项式有效。当接收器正确的收到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰失真。

FPGA/MATLAB学习教程/源码/项目合作开发 3534

ag-grid-vue表格合并踩坑记:suppressRowTransform=true到底该不该开?性能与样式的权衡

本文深入探讨了ag-grid-vue表格合并功能中`suppressRowTransform`的性能与样式问题。通过分析浏览器渲染机制和性能测试数据,揭示了transform开启与关闭的优劣,并提供了优化策略和样式解决方案,帮助开发者在数据量大时实现流畅的表格合并效果。

weixin_31220401的博客 342

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

7月最后一周学习内容

container用开启 BFC,解决高度塌陷。left设置向左浮动,right使用开启 BFC。(父盒子和右盒子开启bfc,左盒子固定宽高)2.文本溢出显示省略号(1).设置文本不换行 overflow:hidden;文本溢出的显示省略号(2).伪元素法,子绝父相3.flex布局的实际应用(1).实现两行多列三种方法(两行两列):三列布局:4.

wyzqhhhh的博客 205

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Vue3 储能 EMS 前端实战(上):配置化表单与表格体系

本文是《Vue3 储能 EMS 前端实战》:Vue3 中高级开发者、工业物联网 / 能源管理系统前端工程师:储能云平台 EMS UI。

weixin_45358688的博客 198

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

CSS Table样式深度解析:从基础原理到高级数据表格实战

在Web前端开发中,数据呈现是核心需求之一。CSS作为控制网页样式的核心技术,其盒模型、布局和选择器机制是实现复杂视觉效果的基础。理解CSS的渲染原理,特别是针对特定HTML元素的样式化规则,对于构建高性能、可访问的用户界面至关重要。在数据密集型的后台管理系统和报表场景中,原生HTML Table元素配合精细的CSS控制,往往在语义化、键盘导航和打印友好性上优于使用Div模拟的布局方案,展现出独特的技术价值。本文将聚焦于border-collapse、table-layout等关键属性,深入剖析其工作原理,

weixin_33863087的博客 394

antd vue table 组件做最后一列固定 并合并合计列的操作

本文介绍了如何实现表格固定底部的合计行功能。主要步骤包括:1) 使用CSS样式固定最后一行位置;2) 通过customRender方法合并指定列;3) 处理合并列后多余的td元素;4) 使用插槽控制操作列的渲染。文中提供了关键代码片段和效果展示图,展示了合并5列后的最终效果。该方法适用于需要固定底部合计行并实现多列合并的表格场景。

Benz_s600的博客 574

Selenium元素定位实战:构建稳定可靠的UI自动化测试体系

在UI自动化测试中,元素定位是确保测试脚本稳定性的核心技术。其原理是通过代码识别并操作页面上的特定组件,如按钮、输入框等。这项技术的价值在于将重复性的人工测试转化为可重复执行的自动化流程,从而提升测试效率和覆盖率。在实际应用中,随着前端框架的普及和单页应用的复杂化,动态ID、异步加载等场景对定位的稳定性提出了更高要求。为此,工程师需要掌握显式等待、Page Object Model等高级策略,并合理运用CSS Selector和XPath等定位器。本文聚焦于Selenium自动化测试中的元素定位难题,通过构

aoe41606的博客 404

Vue3 Grid组件重构:精准控制rowsPerPage与固定表头实现

Grid表格组件是前端开发中高频使用的数据展示基础单元,其核心在于数据驱动渲染、分页逻辑可控与表头固定兼容性。基于Vue.js的响应式原理,通过Composition API解耦状态管理与DOM操作,使rowsPerPage不再仅是显示参数,而是决定数据切片的数学因子;固定表头则摒弃CSS sticky的兼容缺陷,采用双table+ResizeObserver列宽同步方案,保障iOS Safari、IE11等多端一致性。该设计显著提升财务导出准确率、客服操作效率及大数据量浏览性能,适用于中后台系统、数据分析

weixin_30316097的博客 486

jQuery事件系统核心原理:委托、标准化与跨浏览器兼容

事件处理是前端交互的基石,其本质是监听用户行为并触发响应逻辑。原生DOM事件存在单播覆盖、浏览器差异、监听器注册分裂等底层缺陷,导致兼容性差、维护成本高。jQuery通过事件委托实现动态元素零绑定、事件对象标准化统一target/which等属性、命名空间支持精准解绑、生命周期钩子控制触发语义,构建起健壮的事件操作系统。这些机制不仅解决了IE与现代浏览器的兼容难题,更成为Vue、React等框架事件设计的思想源头。本文聚焦事件委托与事件对象标准化两大核心热词,解析其在真实业务场景(如动态列表操作、表单验证、

unixboy 522
上一篇: vue修改元素样式
下一篇: ES6学习一(变量声明和结构赋值)
BAtodl
博客等级 码龄7年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值