uniapp vue3微信小程序如何获取dom元素

在网上很多人说可以通过下面两种形式获取到指定dom元素

js 复制代码
// 定义ref
<div ref="box"></div>

//1通过this.$refs获取dom元素
this.$refs.box

//2通过ref(null)获取dom元素
let box = ref(null)

第一种方式在vue2中是可以获取到的,但是在vue3 setup中是没有this的(需要通过getCurrentInstance方法获取当前组件实例),所以这种方式排除

第二种方式在阅览器端是可以获取到的,但是在小程序端是获取不到的(这种方式可以获取到当前组件中的子组件实例),所以这种方式也排除

下面分两种情况来介绍如何在uniapp vue3微信小程序端获取dom元素

一、当前组件非子组件

js 复制代码
<div id="box"></div>
//根据id获取
uni.createSelectorQuery().select('#box').node().exec(res => {
		//res[0].node未获取到的指定的dom元素对象
		console.log("res",res[0].node)
})

上面这种方式,只适合在非子组件的情况下使用,如果当前组件时作为子组件,需要通过下面的方式

二、当前为子组件

js 复制代码
<div id="box"></div>
//根据id获取
const instance = getCurrentInstance();//获取当前组件实例
uni.createSelectorQuery().in(instance).select('#box').node().exec(res => {
		//res[0].node未获取到的指定的dom元素对象
		console.log("res",res[0].node)
})

注意:这种情况下需要传入当前组件的是你instance才能获取到指定dom元素

为啥子组件要多加一个instance才能获取到dom元素?

因为在 Vue 3 中,子组件实例不再直接暴露给全局或者父组件,而是需要通过 getCurrentInstance() 方法获取。这是为了更好地管理组件实例,确保组件在不同环境中的正确渲染和状态管理。通过 uni.createSelectorQuery().in(instance) 方法可以指定查询的范围,这里的 instance 需要是一个 DOM 节点或者一个包含 DOM 节点的组件实例。

相关推荐
低代码布道师2 小时前
加油站小程序实战教程04类目级联选择
低代码·小程序
狼性书生2 小时前
uniapp vue3实现的一款数字动画调节器件,支持长按、单点操作,提供丝滑的增减动画效果
前端·vue.js·微信小程序·小程序·uni-app
小和尚敲代码2 小时前
推荐一款uniapp的日历插件魔改版可显示阳历阴历农历公历
uni-app·日历·uni-calendar
礼貌而已2 小时前
vue3+ts+uniapp+unibest 微信小程序(第二篇)—— 图文详解自定义背景图页面布局、普通页面布局、分页表单页面布局
微信小程序·uni-app·notepad++
qq_12498707532 小时前
Java+Vue+uniapp微信小程序校园自助打印系统(程序+论文+讲解+安装+调试+售后)
vue.js·微信小程序·uni-app·毕业设计
林涧泣3 小时前
【Uniapp-Vue3】使用uniCloud.uploadFile上传图片到云存储
uni-app
Luckysec3 小时前
微信小程序源码逆向 MacOS
macos·微信小程序·小程序·渗透测试·wxappunpacker
萧寂1738 小时前
微信小程序自定义轮播图指示点样式
微信小程序·小程序
林涧泣14 小时前
【Uniapp-Vue3】开发userStore用户所需的相关操作
前端·vue.js·uni-app
SuperherRo16 小时前
自动化反编译微信小程序工具-e0e1-wx
微信小程序·自动化·hook·反编译