微信小程序操作dom元素节点 wx.createSelectorQuery()

本文介绍了使用WXML和JS进行节点操作的方法,包括通过ID选择节点并获取其位置信息和尺寸,展示了如何利用微信小程序API实现页面元素的精确控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WXML

<view>
    <text class="title" id="productServe">产品服务</text>
    <text class="title" id="enterpriseServe">企业服务</text>
    <text class="title" id="normalServe">常用应用</text>
</view>

JS

Page({
  //声明节点查询的方法
  queryMultipleNodes: function() {
    const query = wx.createSelectorQuery()                // 创建节点查询器 query
    query.select('#productServe').boundingClientRect()    // 这段代码的意思是选择Id=productServe的节点,获取节点位置信息的查询请求
    query.select('#enterpriseServe').boundingClientRect() // 这段代码的意思是选择Id=enterpriseServe的节点,获取节点位置信息的查询请求
    query.select('#normalServe').boundingClientRect()     // 这段代码的意思是选择Id=normalServe的节点,获取节点位置信息的查询请求
    query.selectViewport().scrollOffset()                 // 这段代码的意思是获取页面滑动位置的查询请求
    query.exec((res) => {
      res[0].top                                          // #productServe节点的到页面顶部的距离
      res[1].width                                        // #enterpriseServe节点的宽度
      res[2].height                                       // #normalServe节点的高度
    })
  }
})

console.log(res) 输出节点信息详情

 

 

 

 

 

 

 

文章每周持续更新,可以微信搜索「 前端大集锦 」第一时间阅读,回复【视频】【书籍】领取200G视频资料和30本PDF书籍资料

<think>我们正在讨论微信小程序的`wx.createSelectorQuery()`方法,特别是如何用它来遍历子节点。根据用户的问题,用户希望遍历某个元素的子节点。 在微信小程序中,`wx.createSelectorQuery()`返回一个SelectorQuery对象,用于选择节点并获取其信息。要选择某个节点的子节点,我们可以使用SelectorQuery的`children`方法。步骤: 1.首先,我们需要选择父节点(比如通过id选择)。 2.然后,使用`children`方法选择该父节点的所有直接子节点。3.如果需要,还可以进一步选择(比如子节点的子节点,使用`descendants`方法可以选择所有后代节点,但用户要求的是孩子节点,即直接子节点)。4.最后,执行查询并获取结果。示例代码: 假设我们有一个父元素,其id为"parent",我们想获取它的所有直接子节点信息(比如布局信息)。```javascript//在Page的方法中let query= wx.createSelectorQuery().in(this); //注意:在自定义组件中需要传入组件实例,在Page中可以用thisquery.select('#parent').children().boundingClientRect(function(rects){// rects是一个数组,包含所有子节点的布局信息console.log(rects); }).exec();``` 说明: -`select('#parent')`选择id为parent的节点。- `children()`选择该节点的所有直接子节点。 -`boundingClientRect`用于获取这些子节点的布局信息(位置、尺寸等),回调函数的参数是一个数组,每个元素代表一个子节点信息。 注意:如果父节点有多个子节点,那么`boundingClientRect`的回调函数会收到一个数组,数组的每个元素是一个对象,包含每个子节点的位置和尺寸信息。 如果用户需要遍历子节点并做进一步操作,可以在回调函数中处理这个数组。 另外,引用[3]中提醒不要将标签选择放入变量中写无限循环的代码,所以我们要注意避免在回调函数中再次执行同样的查询导致循环。 根据引用[4],我们也可以看到使用`select`方法选择单个节点,而`children`方法选择的是多个节点(直接子节点)。 因此,用户想要遍历孩子节点,使用`children`方法即可。相关问题:§§相关问题§§1.微信小程序中如何获取某个节点的所有后代节点(包括子节点、孙节点等)?2.除了`boundingClientRect`,还可以通过`wx.createSelectorQuery()`获取哪些节点信息?3.在自定义组件中如何使用`wx.createSelectorQuery()`?4.如何通过`wx.createSelectorQuery()`监听节点的位置变化?</think>在微信小程序中,使用`wx.createSelectorQuery()`遍历子节点可以通过以下方法实现: ### 核心解决方案 ```javascript Page({ data: { childrenNodes: [] // 存储子节点信息 }, // 获取子节点信息 getChildrenNodes() { const query = wx.createSelectorQuery().in(this) // 选择父节点 query.select('#parent').fields({ node: true, size: true }, res => { if (!res || !res.node) return // 获取所有子节点 const children = res.node.childNodes const nodesInfo = [] // 遍历子节点 children.forEach((child, index) => { // 获取每个子节点信息 query.select(`#${child.id}`).boundingClientRect(rect => { nodesInfo.push({ id: child.id, index, rect }) }).exec() }) this.setData({ childrenNodes: nodesInfo }) }).exec() } }) ``` ### 关键说明 1. **选择父节点**: ```javascript query.select('#parent') // 通过ID选择父元素 ``` 2. **获取子节点集合**: ```javascript const children = res.node.childNodes // 获取DOM节点列表 ``` 3. **遍历子节点**: ```javascript children.forEach((child, index) => { query.select(`#${child.id}`) // 通过子节点ID选择 }) ``` 4. **获取节点信息**: ```javascript .boundingClientRect(rect => { // rect包含位置和尺寸信息 // top, left, width, height等 }) ``` ### 注意事项 1. **节点必须设置ID**: ```html <!-- WXML中必须为子节点设置id --> <view id="parent"> <view id="child1"></view> <view id="child2"></view> </view> ``` 2. **自定义组件中使用**: ```javascript // 在自定义组件中需添加.in(this) const query = wx.createSelectorQuery().in(this) ``` 3. **避免嵌套查询**: 引用[3]警告避免在回调中嵌套查询,可能导致无限循环[^3]。建议在父节点查询完成后统一处理子节点。 4. **API限制**: 微信小程序无法直接操作DOM节点,但可通过此API获取布局信息[^1][^4]。 ### 应用场景 - 实现瀑布流布局 - 动态计算滚动位置 - 元素位置联动效果 - 可视化图表绘制 ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Demi

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值