Taro小程序获取DOM元素 - Kaiqisan

2023-11-07

拖更一个月,抱歉!(露出肚皮)
主要是过年+考研复习,最近没时间写博客
就分享下最近写的项目遇到的问题

观前提示:本篇文章所有内容基于Taro+React+typescript,我会尽量敲一遍ts代码再敲一遍js代码(快夸我贴心!快o(´^`)o),并且打包在小程序端,不讨论h5端的所有情况!!

最近碰到一个问题,是关于获取使用Taro来获取小程序中某元素的DOM节点的内容的,我尝试使用js原生的方法来获取

document.getElementsByClassName('demoDOM')

在这里插入图片描述
虽然获取的内容很全面

但是,这个方法还是原来的老毛病,太麻烦!而且无法获取其css样式

于是查了下官网,有了以下的新方案

官网链接

	let query = Taro.createSelectorQuery();
    query.select('.demoDOM').boundingClientRect((res) => {
    	console.log(res);
	}).exec()

如果写在生命周期函数中的话(vue和react的都要!),需要添加一个200ms的延时定时器,否则会收获一个寂寞!

setTimeout(() => {
	let query = Taro.createSelectorQuery();
	query.select('.demoDOM').boundingClientRect((res) => {
		console.log(res);
	}).exec()
}, 200)

我获取的结果

在这里插入图片描述
有人肯定会问,哎这是什么玩玩,获取的就这么点东西,怎么能说是更好的解决方案呢?

且慢

仔细看里面的内容,这些都是无法使用上面的方法获取到的,在style属性中根本找不到!

而且,这些都是获取到的最基本的信息,我们可以也可以根据自己的需求返回我们想要的信息!

let query = Taro.createSelectorQuery();
query.select('.demoDOM').fields({
    computedStyle: ['margin', 'backgroundColor']
}, (res) => {
    console.log(res);
}).exec()

最后我们就会获得这个元素的外边距和背景颜色,这些都是实打实的样式,就算您把样式和类名或者id绑定,它都可以获取得到。
这里,如果您使用ts书写的话,如果您的属性不符合其要求或者属性名书写不规范的话,都会警告,记得盯紧这些细微的信息!

好了贴完代码了,如果您只是来cv搬砖的,今天的CSDN就看到这里吧!(bushi)接下来我们说下关键代码!

Taro.createSelectorQuery() : 返回一个 SelectorQuery 对象实例,也代表从这里开始寻找节点,建议使用参数来接收一下!

let ele = Taro.createSelectorQuery()

boundingClientRect((result) => void): 里面需要传入一个函数,返回所获取的所有结果,是个回调函数

Taro.createSelectorQuery().select('.demoDOM').boundingClientRect((res) => {
    console.log(res, 'ddd');
})

exec(): 此处开始执行寻找DOM

Taro.createSelectorQuery().select('.demoDOM').boundingClientRect((res) => {
    console.log(res, 'ddd');
}).exec()

fields(fields): 传入对象,里面填写所有想要搜寻的内容

let query = Taro.createSelectorQuery();
query.select('.demoDOM').fields({
    dataset: true,
    computedStyle: ['margin', 'backgroundColor', 'left', 'top', 'borderRadius'],
    properties: ['scrollX', 'scrollY'],
    scrollOffset: true,
    size: true,
    context: true 
}, (res) => {
    console.log(res);
}).exec()

所有合法参数见官网 官网–友情链接–直接打开,不要带犹豫,很快的!

如果您正在使用TS的话而且您的英语水平还算不错的话,建议跟着代码提示的脚步走

其他方法

context( (res) => void): 添加节点的 Context 对象查询请求。目前支持 VideoContext、CanvasContext、LivePlayerContext、EditorContext和 MapContext 的获取。以便执行这些特殊标签的特殊动作!

以一个视频标签为例

Taro.createSelectorQuery().select('.videoDemo').context(function (res) {
  console.log(res.context)
}).exec()

在这里插入图片描述
node( (res) => void): 获取当前元素的实例(只有canvas标签支持)

Taro.createSelectorQuery().select('.canvas').node(function(res){
  console.log(res.node)
}).exec()

selectAll(string) : 搜寻所有符合条件的节点,返回一个数组

Taro.createSelectorQuery().selectAll('.demoDOM').boundingClientRect((res) => {
    console.log(res, 'ddd');
}).exec()

selectViewport(string) 获取某个节点的滚动信息(前提是这个节点有滚轮(是ViewScroll组件))

这里不举例了,同上!

总结

英文名很长,记得熟记!切记不要使用原生的方法获取DOM,这样会很消耗性能!这里诚心推荐使用TS,代码提示超级顺畅!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Taro小程序获取DOM元素 - Kaiqisan 的相关文章

  • Angular2:鼠标事件处理(相对于当前位置的移动)

    我的用户应该能够通过鼠标在画布中移动 或旋转 对象 当鼠标事件发生时 屏幕坐标用于计算与最后一个事件的增量 方向和长度 没什么特别的 mousedown 获取第一个坐标 mousemove 获取第n个坐标 计算deltaXY 按deltaX
  • 如何使用 TypeScript、Jest 和 Enzyme 测试 React 中的按钮点击

    我正在使用 TypeScript 构建一个 React Native 应用程序 我正在使用 Jest 和 Enzyme 进行组件测试 我也在使用 React 导航 我正在努力编写单击按钮的单元测试 这是组件的代码 只是渲染函数 render
  • Typescript 模块解析的根路径

    我有两个使用打字稿的项目 一个是核心项目 moduleA 另一个是业务项目 moduleB 项目B使用项目A的模块 ts文件 位于 scripts文件夹 我想通过以下方式为projectB指定模块解析根文件夹projectA scripts
  • 第二个函数参数的条件类型

    我有以下功能 function doSomething param1 string param2 string return param1 param2 我也有基于 json 的类型 其结构看起来与此类似 a1 b1 something1
  • 由于 CORS 错误,POST 请求在 React axios 中被阻止[重复]

    这个问题在这里已经有答案了 我正在尝试向包含多部分数据的 API 发送 POST 请求 我在 postman 中测试了 API 一切正常 但是当我在react中调用API时 它给了我CORS错误 我交叉检查了 URL 标头和数据 对我来说一
  • Angular2 viewContainerRef.createComponent 工作正常

    我使用 viewContainerRef createComponent 将动态组件加载到根组件 但实际上它附加了错误的位置 my code app compoment ts export class AppComponent privat
  • Rangy:插入符号下的单词(再次)

    我正在尝试创建一个预输入代码以添加到 wysihtml5 富文本编辑器 基本上 我需要能够插入人员 标签引用 例如 Twitter Github Facebook 我发现一些人试图实现同样的事情的代码 http jsfiddle net A
  • 如何包装内在组件,保留大部分 Props?

    我想用我自己的 React 功能组件包装一个标准按钮 但我希望新组件的用户能够设置 几乎所有底层按钮的道具 当然 我想保持正确的打字 所以如果 WrappedButton 包含一个button then
  • React Image:createObjectURL 链接给出错误 404(未找到)

    我在 React with Typescript 中使用以下代码创建了一个 ImageUrl 它创建了一个 URL 但不显示图片图像 单击 URL 例如 http localhost 3003 0b4de100 d8eb 49a7 b43a
  • 限制可选 DOM 复选框

    我试图限制用户可以选择的复选框数量 这些复选框是为数组中的每个项目生成的 DOM 输入对象 我目前对此没有运气 因此非常感谢任何帮助 谢谢 在这里小提琴 http jsfiddle net vVxM2 222 http jsfiddle n
  • React Native 扩展 NativeModules TypeScript 类型

    我有一个本机模块 我想输入它 这是我的模块界面的示例 export interface BBAudioPlayer playSound sound click tada gt Promise
  • 如何在 Angular 项目中使用 Bootstrap?

    我开始我的第一次Angular应用程序和我的基本设置已完成 我怎样才能添加引导程序我的申请 如果您可以提供一个示例 那么这将是一个很大的帮助 如果您使用Angular CLI要生成新项目 还有另一种方法可以使 bootstrap 可访问角度
  • 类型错误:类扩展值未定义不是函数或 null

    尝试创建这些实体时出现以下错误 TypeError Class extends value undefined is not a function or null 我假设这与循环依赖有关 但是在使用表继承和一对多关系时应该如何避免这种情况
  • 如何在 Vue SFC 中使用 Typescript 全局类型声明?

    In Vue2 Typescript我有的项目global d ts具有某些类型的文件 例如 全局 d ts type Nullable
  • ES6继承:使用`super`访问父类的属性

    JavaScript 的super关键字 当我在 Chrome Babel TypeScript 上运行代码时 得到了不同的结果 我的问题是哪个结果是正确的 规范的哪一部分定义了这种行为 下面的代码 class Point getX con
  • 没有 Props 的 TypeScript React State

    我想利用 TypeScript 中的静态和强类型 但仅限于状态 因为我不打算采用任何道具 当我尝试传递接口时 最终出现错误 import as React from react import Link from react router d
  • PHP DOM - 剥离 span 标签,保留其内容

    我希望采用如下标记 span class test Some text that is strong bolded strong and contains a a href link a span 并在 PHP 中找到剥离跨度的最佳方法 剩
  • NestJS e2e 测试模拟会话装饰器

    我正在尝试使用 supertest 编写一个 e2e 测试 其中我的控制器实际上使用了 Session 装饰师 然而 我不想承担使用数据库连接等启动会话的全部负担 因此测试中的我的应用程序实际上并未初始化会话 相反 我想首先模拟掉装饰器提供
  • 避免在 ES6 的函数内定位 this 的对象作用域

    例如 我正在使用 D3 js 运行一个项目 导入特定模块并调用它们的函数 Setup TypeScript ES6 导入特定的 D3 组件 角6 我有一个对象 在本例中是一个角度指令 并在 SVG 画布上绘制一些圆圈 并希望它们在拖动事件上
  • VSCode TypeScript 问题Matcher `$tsc-watch` 未观看

    我试图避免使用watch true in a tsconfig json配置 通过 VSCode 的任务 我正在使用基本问题匹配器 tsc watch但它没有启动tsc构建时处于监视模式 我正在添加gulp支持 我看到有gulp watch

随机推荐

  • Column 'id' in where clause is ambiguous

    使用mysql数据库进行左右连接查询的时候出现错误提示 Column id in where clause is ambiguous 这个错误in where clause is ambiguous多半是因为多表查询的时候几个表中同时出现了
  • 【C#】《三子棋》

    使用 数组 函数 循环 实现一个超级简单的三子棋 总共200行代码 先来看看成果 运行程序 显示出菜单 选择1 开始游戏 玩家先 输入坐标 如 1 1 为电脑 为玩家 玩家胜利 按任意键继续 返回菜单 首先分别创建一个头文件和两个源文件 g
  • NeRF与三维重建专栏(一)领域背景、难点与数据集介绍

    前言 关于该系列专栏 主要介绍NeRF在三维重建中的应用 这里我们特指MVS multi view stereo 也即输入带位姿的图片 输出三维结构例如点云 mesh等 并且后面的工作也都是围绕MVS with NeRF讨论的 虽然也有wi
  • Spark 总结项目一---报错:bigger than spark.driver.maxResultSize

    七 spark集群报错 bigger than spark driver maxResultSize 难点 报错代码 20 09 15 15 21 32 ERROR scheduler TaskSetManager Total size o
  • Android Small插件化框架--启动插件Activity源码解析(下)

    转自 http m blog csdn net article details id 53158432 参考博文 http www tuicool com articles EjEJNrJ http m w2bc com article 1
  • 四、基础数据结构和算法:简单排序算法

    4 简单排序算法 4 1 冒泡排序 4 1 1 步骤 方式1 首先实现一趟冒泡排序 单趟冒泡排序将数组内最大值放到arr n 1 的位置 void bubble int arr int n for int i 0 i lt n 1 i if
  • 第5章 K8s基础篇-基本概念

    01 master节点 举个栗子 你启动3个nginx 副本 此时你想扩容至5个 输入完对应命令后 kube apiserver会通通知cm cm实施具体的容器扩缩容操作 02 Node节点 查看kube proxy工作模式 iptable
  • 如何用matplotlib绘制柱状图,并显示超出坐标范围的数据

    最近在处理数据 为了方便展示 需要绘制柱状图进行可视化 数据类似对数正态分布 即数据值越接近均值 数据越多 反之距离均值越远 数据量越少 形式类似于下图 可以看到 大部分数据落在0 10以内 大于10的部分我们不太关心 import num
  • linux下获取本机IPv6地址、前缀、网关

    获取本机IPv6信息命令 cat proc net if inet6 root IT PC 135 home user1 cat proc net if inet6 fe80000000000000922b34fffe4e70f4 02 4
  • libmodbus学习(一)之Modbus RTU-master

    一 Modbus 协议 Modbus簇主要有三种协议 Modbus RTU Modbus ASCII Modbus TCP 工控行业通常的设备组网看 三者应用的范围如下 三者模型区别如下 如上图所示 串行传输的物理层是RS 485或RS 2
  • datagrid传参_12. ajax、datagrid请求传参实例

    实例1 var data data orgRoleCode orgRoleCode data orgRoleName orgRoleName data containRoleIds containRoleIds data remark re
  • 1-问过 chatgpt 的问题(天马行空想问什么问什么)

    这里写目录标题 一 复数的极坐标形式是什么 如何求它的相位角 二 信号分解方法 2 1 了解 Fourier decomposition method 方法吗 具体解释一下它的原理 并给出一些参考文献 2 2 我说的FDM算法是出自 The
  • Unity3D项目程序加密——对dll进行混淆

    这里假设我们在Unity3D里面写的代码抽象成这样一个Test类 里面包含了公开和私有的变量 有自带的Start方法 Update方法和OnGUI方法 还有public private和protected方法 虽然说用抽象类代表了项目里面实
  • MySQL导入与导出.sql文件实操

    你是否对获得MySQL导入与导出 sql文件的实际操作感到无语 如果是这样子的话 此文将会给你相应的解决方案 以下的文章主要是介绍获得MySQL导入与导出 sql文件 的方案 以下就是相关内容的具体描述 一 MySQL的命令行模式的设置 桌
  • c++基础

    C 浅谈 闲暇之际 一直想把自己那些零碎的知识给连贯起来 形成一个体系 所以才决定写点东西来整理下最近半年来的知识点 我想把自己的知识输出才是最高效的学习方法 本博客讲结合我自己本人的实际工作经验 进行浅谈 与诸君分享 共同进步 由于能力有
  • idea java 阿里巴巴_AS 阿里巴巴Java开发规约 CheckStyle-IDEA

    Alibaba Java Coding Guidelines 简介 Alibaba Java Coding Guidelines 是阿里巴巴发布的基于 IDEA 的 Java 开发规约扫描插件 经过247天的持续研发 阿里巴巴于10月14日
  • Jmeter使用教程

    一 Jmeter介绍 二 Jmeter安装教程 1 下载地址 安装之前首先配置Java环境变量 Apache JMeter Download Apache JMeter 根据自己电脑系统来选择合适的安装包即可 2 环境变量配置 配置Jmet
  • java基础:成员变量与局部变量

    java中的变量 在java语言中 根据定义变量的位置不同 可以将变量分为两大类 一类是成员变量 一类是局部变量 由于二者之间存在很大的区别 所以在此介绍 1 成员变量 在类中定义的变量 分为类变量和实例变量两种 在定义类变量的时候 没有s
  • 神经网络学习小记录75——Keras设置随机种子Seed来保证训练结果唯一

    神经网络学习小记录75 Keras设置随机种子Seed来保证训练结果唯一 学习前言 为什么每次训练结果不同 什么是随机种子 训练中设置随机种子 学习前言 好多同学每次训练结果不同 最大的指标可能会差到3 4 这样 这是因为随机种子没有设定导
  • Taro小程序获取DOM元素 - Kaiqisan

    拖更一个月 抱歉 露出肚皮 主要是过年 考研复习 最近没时间写博客 就分享下最近写的项目遇到的问题 观前提示 本篇文章所有内容基于Taro React typescript 我会尽量敲一遍ts代码再敲一遍js代码 快夸我贴心 快o o 并且