vue3中获取dom元素和操作

article/2025/9/13 20:47:24

一,需求概述

直接举例子来说明吧,我想要做的是,遍历这几个菜单,获取他们的dom元素的宽度。当文字dom元素宽度太长的话,需要滚动显示文本。
在这里插入图片描述

二,实现思路

对应的html:

<div class="icon-box" ref="menu_item"><divclass="menu-box"v-for="(item, index) in iconMenus":key="index"@click="clickItem(item)"><span :class="[item.imageRef, 'item-image']"></span><div class="item-content">{{ item.menuName }}</div></div></div>

对应的css:

.menu-box {width: 144px;height: 144px;margin-top: 5px;flex-shrink: 0;position: relative;overflow: hidden;.item-image {display: block;font-size: 60px;padding: 15px;&::before {color: v-bind(zeroTheme);}}.item-content {font-size: 26px;display: inline-block;white-space: nowrap;}.item-content-flag {font-size: 26px;position: absolute;display: inline-block;white-space: nowrap;left: 0;bottom: 22px;white-space: nowrap;-webkit-animation: todayScroll 4s linear infinite;animation: todayScroll 5s linear infinite;}}

第一步,先通过ref获取最外层容器的dom:

const menu_item = ref(null);

第二步:遍历判断,给超长的dom添加class样式

 menu_item.value.children.forEach(element => {let parentWith = element.offsetWidth;let childrenWith = element.children[1].offsetWidth;if (childrenWith >= parentWith - 10) {element.children[1].classList.add('item-content-flag');}});

三,由此得到vue3中常用的dom操作

1,获取dom

<div class="icon-box" ref="menu_item"></div>
const menu_item = ref(null);

2,获取dom的子节点

const menu_item = ref(null);
menu_item.value.children

3,获取某个元素节点的宽度

上文已经获取到dom节点,这里用vNode替代,于是该节点的宽度:

vNode.offsetWidth

有的时候,我们想通过vNode.style.width来获取。但是它只能获取js给定的width,无法获取css给定的width。所以这种方式获取到的会是空。

4,给某个dom节点添加class

vNode.classList.add('newClass')

四,获取到dom节点之后修改样式

主要就是取到dom元素节点之后。设置style属性

 headerOrangeMask: require('@/assets/img/header-blue-mask.png'), //首页顶部的我的图标
const myMask = ref(null);
nextTick(() => {myMask.value.style.backgroundImage = `url(${headerOrangeMask})`; //设置背景图片
});

五,父组件调用子组件的函数方法

1,第一步,子组件暴露要被父组件调用的方法

// 主动暴露childMethod方法
defineExpose({ noticeSwiper });
//公告轮播-父组件请求完成后调用
function noticeSwiper() {console.log("子组件中的方法执行了")
}

2,第二步,父组件中取得子组件的dom并调用方法

<Notice ref="noticeNode"></Notice>const noticeNode = ref(null); //公告组件的node
//获取公告信息
function getNotice() {store.dispatch('notice/getNoticeList').then(() => {noticeNode.value.noticeSwiper(); //调用子组件方法轮播公告});
}

http://chatgpt.dhexx.cn/article/KliD8IpX.shtml

相关文章

vue 3.0 使用ref获取dom元素

前言 附上vue3.0文档&#xff1a;Vue3中文文档 - vuejs 2022.10.22 更新 鉴于较多人询问几个高频问题&#xff0c;在此做统一回复 ref.value获取到的是null 答&#xff1a;检查是否将ref变量return出去了 答&#xff1a;检查是在哪里进行的console.log&#xff0c;setup函数…

Vue.js实例学习:获取DOM元素

一、获取DOM元素 在Vue中获取DOM元素&#xff0c;我们可以用ref。 用法(和React一样)&#xff1a; &#xff08;1&#xff09;在组件的DOM部分&#xff0c;任意标签中 写上&#xff1a;ref"xxx" &#xff08;2&#xff09;通过组件对象 this.$refs.xxx 获取到元素 …

ref 引用(vue获取DOM元素)

ref 引用 jquery 牛逼 简化了程序员操作DOM的过程 vue 优势&#xff1a; MVVM 在 vue 中&#xff0c;程序员不需要操作DOM。只需要把数据维护好&#xff01;(数据驱动视图) 结论&#xff1a;在 vue 项目&#xff0c;强烈不建议大家安装和使用jQuery&#xff01;&#xff01;&am…

sql中批量插入数据用法

单次插入数据方法 INSERT INTO 表名&#xff08;字段1&#xff0c;字段2&#xff0c;字段3&#xff09;VALUES(第一个值&#xff0c;第二个值&#xff0c;第三个值&#xff09; 多次插入方法 第一种 INSERT INTO 表名&#xff08;字段1&#xff0c;字段2&#xff0c;字段3…

sql-批量插入数据脚本

批量插入数据脚本 1、第一种批量插入数据脚本. 可以基本满足要求。理解上较为简单&#xff0c;所以这个最常用。 DECLAREmaxnumber CONSTANT INT : 5000;--插入5000条数据i INT : 1;--i的取值从1开始 BEGINFOR i IN 1 .. maxnumber loopinsert into ODS.TABLE1--表名(ID, P_ID…

oracle11g批量insert多条,Oracle高效批量插入数据

一、准备工作 建表 CREATE TABLE TEMP_20200210 ( DMC VARCHAR2(100); ) 用程序拼接如下的批量插入的SQL INSERT INTO TEMP_20200210 (DMC) SELECT CD.* FROM ( SELECT 1234567 FROM DUAL UNION SELECT 1234568 FROM DUAL UNION SELECT 1234568 FROM DUAL ) CD 在C盘文件夹下放…

springboot 注解方式批量插入数据

文章目录 一.使用场景二.实现方法1.mysql表结构2.domain3.mapper4.测试类5.测试结果 三.插入效率对比1.批量插入2.一条一条插入 一.使用场景 一次请求需要往数据库插入多条数据时&#xff0c;可以节省大量时间&#xff0c;mysql操作在连接和断开时的开销超过本次操作总开销的4…

Jmeter向数据库批量插入数据

Jmeter向数据库批量插入数据 下面介绍一下Jmeter向mysql数据库中插入数据的入门操作 1、新建一个线程组&#xff0c;这是必经步骤&#xff1a; 在测试计划上右键–>添加–>Theaders(Users)–>线程组 2、添加配置元件JDBC Connection Configuration 在线程组上右键…

【Hbase批量插入数据】

一.批量插入数据&#xff08;hbase用户执行&#xff0c;不可以调整key&#xff09; -- create ns_zj001:bigTab,f01 -- put ns_zj001:bigTab,001,f01:name,zhangsan java -cp ./hbase-tools-1.0.jar:hbase classpath com.suning.tools.Tools -zk hbase01-dev.cnsuning.com,h…

大数据写入到Oracle数据库(批量插入数据)

开发中经常遇到批量插入数据的需求&#xff0c;为了提高开发效率大多会使用ORM架构&#xff0c;个别之处 才会手写SQL&#xff0c;我们使用C#.NET Core5.0开发&#xff0c;所以优先选择了微软的EF。 但是EF原生没有批量操作功能&#xff0c;需要自己扩展或使用第三方的扩展&am…

Mybatis如何批量插入数据?

有一小段时间没有写技术博文了&#xff0c;今天我又来更新啦&#x1f60a;&#x1f60a;&#x1f60a;5月份中间有个小插曲&#xff0c;那就是我在单位打球意外导致脚跟腱受伤&#xff0c;然后住院在家修养了一个多月了&#xff0c;所以小伙伴们在外锻炼时还是时刻注意自身的安…

MYSQL-批量插入数据

批量插入数据 存储过程也有返回值&#xff0c;存储过程有一个或多个返回值&#xff0c;函数有且只有一个返回值 往表里插入1000w数据 1.建表 create database bigData; use bigData;create table dept( id int unsigned primary key auto_increment, deptno mediumint unsi…

Mybatis批量插入数据

前言 在很多业务场景中&#xff0c;我们需要批量录入数据。那么意味着我们需要以最高效的方式去实现功能&#xff0c;同时也需要保证软件的便捷性与可维护性&#xff0c;开源字节使用MyBatis foreach标签方式优雅的实现了材料的出入库。源码开放&#xff0c;可前往码云仓库免费…

批量插入

目录 一、批量插入数据 ⚪JDBC的批量处理语句的方法 二、高效的批量插入 1.举例&#xff1a;向goods表中插入20000条数据 ⭐goods表的创建 方式一&#xff1a;使用Statement 方式二&#xff1a; 使用PreparedStatement替换Statement &#x1f319;方式一与方式二的对比…

三种批量插入数据的方法

批量插入数据 本文将介绍三种批量插入数据的方法。第一种方法是使用循环语句逐个将数据项插入到数据库中&#xff1b;第二种方法使用的是SqlBulkCopy&#xff0c;使您可以用其他源的数据有效批量加载 SQL Server 表&#xff1b;第三种使用的方法是sql server中的表值参数方法&a…

Vue 通过a标签下载文件

vue前端点击某个a便签需要下载对应文件&#xff0c;href为下载路径&#xff0c;download为下载文件名 这是Vue-cli3 写法 因为public文件夹是静态拷贝。 并不要把文件放到src>assets里面 因为assets中的文件会经过 webpack 打包&#xff0c;重新编译。 <a href"./p…

通过 a 标签下载文件

后台管理项目涉及到文件下载到本地&#xff0c;类型包括&#xff08;图片&#xff0c;音频&#xff0c;视频&#xff0c;office文件等等&#xff09;&#xff0c;只需将后台接口提供的url给到 a 标签即可。 <div class"preview-download" click.stop"downLoa…

a标签下载文档 a下载文档失败问题 跨域调用

可以通过a标签下载文档 a中有一个download属性 这个属性可以为空&#xff0c;如果写入的话这是写下载文档的名字 a标签默认下载是在同一个域内&#xff0c;如果跨域的话下载会失败&#xff0c;可能变成预览 出现的问题 from origin ‘http://localhost:8080’ has been blocke…

js使用a标签实现文件下载功能

工作中遇到下载txt文本文件的下载需求&#xff0c;稍作整理&#xff0c;下载示例如下&#xff1a; <button onclick"log()">文件下载</button>// 日志函数 function log() {// dom中创建a标签let aTag document.createElement(a)// 日志展示的内容let c…

JS-a标签下载文件

目录 问题描述解决方法拓展 另一种文件流下载 问题描述 昨天拿到一个需求,就是做成这种下载的模样 后台返回的下载链接长成这样 解决方法 就是一个最普通的方法,创建a标签 ,加上download属性,模拟标签点击 就可以触发下载了 注意:这个是因为直接拿到了请求链接,get请求 co…