Vue3中获取DOM元素的几种方法

 更新时间:2026年06月28日 14:27:25   作者:xiangxiongfly915  
本文系统总结Vue3中获取DOM元素的三种核心方式:获取单个DOM元素、通过ref函数批量获取多个DOM元素,以及获取子组件DOM的两种途径,需要的朋友可以参考下

获取单个DOM

<script setup>
import {onMounted, ref} from "vue";

const boxRef = ref();

onMounted(() => {
  console.log(boxRef.value);
  boxRef.value.style.backgroundColor = "red"; // 设置背景色
  const myWidth = boxRef.value.clientWidth; // 获取属性
  console.log(myWidth);
});
</script>

<template>
  <div ref="boxRef"></div>
</template>

<style scoped>
div {
  width: 100px;
  height: 100px;
  margin: 10px;
}
</style>

获取多个DOM

需要给 ref 绑定函数,用于收集所有元素。

<script setup>
import {onMounted, ref} from "vue";

const itemRefs = ref([]);
const list = ref([{id: 1, name: "A"}, {id: 2, name: "B"}, {id: 3, name: "C"}]);
const setItemRef = (el) => {
  if (el)
    itemRefs.value.push(el);
};

onMounted(() => {
  for (const el of itemRefs.value) {
    console.log(el.innerText);
  }
});
</script>

<template>
  <ul>
    <li v-for="item in list" :key="item.id" :ref="setItemRef">
      {{ item.name }}
    </li>
  </ul>
</template>

<style scoped>
div {
  width: 100px;
  height: 100px;
  margin: 10px;
}
</style>

获取子组件的DOM

方式一:defineExpose

子组件需要调用 defineExpose 暴露DOM元素。

子组件:

<script setup>
import {ref} from "vue";

const boxRef = ref();

defineExpose({boxRef});
</script>

<template>
  <div ref="boxRef">
    hello world
  </div>
</template>

父组件:

<script setup>
import Child from "@/components/Child.vue";
import {onMounted, ref} from "vue";

const childRef = ref();

onMounted(() => {
  const el = childRef.value.boxRef;
  console.log(el.innerText);
});
</script>

<template>
  <Child ref="childRef"/>
</template>

方式二:$el

可以通过 $el 获取组件的根DOM

<script setup>
import Child from "@/components/Child.vue";
import {onMounted, ref} from "vue";

const childRef = ref();

onMounted(() => {
  const el = childRef.value.$el;
  console.log(el.innerText);
});
</script>

<template>
  <Child ref="childRef"/>
</template>

到此这篇关于Vue3中获取DOM元素的几种方法的文章就介绍到这了,更多相关Vue3获取DOM元素方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在vue项目中,将juery设置为全局变量的方法

    在vue项目中,将juery设置为全局变量的方法

    今天小编就为大家分享一篇在vue项目中,将juery设置为全局变量的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue开发环境的搭建全过程

    Vue开发环境的搭建全过程

    文章介绍了在网页中使用Vue.js的四种方式:基本方式、脚手架方式(Vue2.0)、使用WebStorm集成环境创建vue-cli项目(Vue3.0)以及Vue项目的目录结构,每种方式都有详细的步骤和示例,帮助读者快速上手Vue.js开发
    2024-11-11
  • Vue3如何自定义指令directive(如权限控制)

    Vue3如何自定义指令directive(如权限控制)

    本文详细介绍了如何在Vue3项目中创建自定义指令directive1,首先,在src/directives/index.ts文件中引入自定义指令,然后,创建src/directives/permission.ts文件来定义具体指令逻辑,在main.ts文件中引入并注册该指令,最后,在页面中使用自定义指令
    2024-12-12
  • 查看vue-cli脚手架的版本号和vue真实版本号及详细操作命令

    查看vue-cli脚手架的版本号和vue真实版本号及详细操作命令

    本文给大家分享如何查看vue-cli脚手架的版本号和vue真实版本号及详细操作过程,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-11-11
  • vue+antd实现折叠与展开组件

    vue+antd实现折叠与展开组件

    这篇文章主要为大家详细介绍了vue+antd实现折叠与展开组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • Vue使用路由钩子拦截器beforeEach和afterEach监听路由

    Vue使用路由钩子拦截器beforeEach和afterEach监听路由

    这篇文章主要介绍了Vue使用路由钩子拦截器beforeEach和afterEach监听路由,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 动态实现element ui的el-table某列数据不同样式的示例

    动态实现element ui的el-table某列数据不同样式的示例

    这篇文章主要介绍了动态实现element ui的el-table某列数据不同样式的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 浅析vue.js数组的变异方法

    浅析vue.js数组的变异方法

    本篇文章给大家分享了vue.js数组的变异方法的相关内容,有兴趣的朋友跟着学习参考下。
    2018-06-06
  • 详解关于element级联选择器数据回显问题

    详解关于element级联选择器数据回显问题

    这篇文章主要介绍了详解关于element级联选择器数据回显问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • vue3 数组清空与重新赋值的操作代码

    vue3 数组清空与重新赋值的操作代码

    这篇文章主要介绍了vue3 数组清空与重新赋值的操作代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09

最新评论