微信小程序如何获取元素节点信息?

本文介绍了微信小程序中如何通过NodesRef获取元素信息,以及SelectorQuery的使用,包括节点对象的方法如.fields()、boundingClientRect()和scrollOffset(),以及如何创建和执行SelectorQuery来查询节点信息。

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

通常在做微信小程序的时候我们经常会需要获取元素的信息,但是微信小程序有没有完整的“DOM”操作,无法像浏览器中获取元素。

不过在微信中也有一套自己的“DOM”,那就是NodesRef,它可以让我们像开发浏览器程序一样轻松愉快的获取页面元素

一、NodesRef 节点对象

1.1、NodesRef是什么?

NodesRef 用于获取 WXML 节点信息的对象

1.2、NodesRef具备的方法?

  • NodesRef.fields(Object fields)
    • 获取节点的相关信息
    • 获取节点的相关信息
  • NodesRef.boundingClientRect()
    • 添加节点的布局位置的查询请求
    • 相对于显示区域,以像素为单位
    • 功能类似于 DOM 的 getBoundingClientRect
  • NodesRef.scrollOffset()
    • 添加节点的滚动位置查询请求
    • 以像素为单位
    • 节点必须是 scroll-view 或者 viewport

二、SelectorQuery 查询节点信息的对象

1.1、 创建SelectorQuery查询对象

let query = wx.createSelectorQuery()

1.2、SelectorQuery方法

  • SelectorQuery.in (对应的组件)

    • 将选择器的选取范围更改为自定义组件 component 内
    • 初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点
  • SelectorQuery.select(string selector)

    • 在当前页面下选择第一个匹配选择器 selector 的节点
  • SelectorQuery.selectAll()

    • 在当前页面下选择匹配选择器 selector 的所有节点。
  • SelectorQuery.selectViewport()

    • 选择显示区域
    • 用于获取显示区域的尺寸、滚动位置等信息
  • SelectorQuery.exec(function callback)

    • 执行所有的请求
    • 请求结果按请求次序构成数组,在callback的第一个参数中返回

三、获取某个元素节点信息

第一步、 创建SelectorQuery查询对象
let query = wx.createSelectorQuery()
第二步、 获取节点对象
  • 方法一:query.select(queryString) 选择第一个匹配节点

  • 方法二:query.selectAll(queryString) 选择所有匹配节点

    • queryString 类型
      • ID选择器:#the-id
      • class选择器(可以连续指定多个):.a-class.another-class
      • 子元素选择器:.the-parent > .the-child
      • 后代选择器:.the-ancestor .the-descendant
      • 跨自定义组件的后代选择器:.the-ancestor >>> .the-descendant
      • 多选择器的并集:#a-node, .some-other-nodes
let queryString = '.blue-product>>>.product-list' let queryNode = query.selectAll(queryString)
第三步、调用节点对象方法
queryNode.fields({
      id:false,//是否返回节点id
      rect:fasle,//是否返回节点布局位置
      dataset: true,//返回数据集
      size: true,//返回宽高
      scrollOffset: true,//返回 scrollLeft,scrollTop
      properties: ['scrollX', 'scrollY'],//监听属性名
      computedStyle: ['margin', 'backgroundColor']//此处返回指定要返回的样式名
    }, function(res) {
      console.log(res)
    })
    
    // 返回结果
    [{
        dataset:{},
        width:247,
        height:1065,
        scrollLeft:0,
        scrollTop:0,
        margin:"0px 0px 10px",
        backgroundColor:"rgba(0, 0, 0, 0)",
    },{
        dataset:{},
        width:247,
        height:1065,
        scrollLeft:0,
        scrollTop:0,
        margin:"0px 0px 10px",
        backgroundColor:"rgba(0, 0, 0, 0)",
    },{
        dataset:{},
        width:247,
        height:1065,
        scrollLeft:0,
        scrollTop:0,
        margin:"0px 0px 10px",
        backgroundColor:"rgba(0, 0, 0, 0)",
    }]

 query.selectAll(queryClass).boundingClientRect(function(rect){
      rect.id      // 节点的ID
      rect.dataset // 节点的dataset
      rect.left    // 节点的左边界坐标
      rect.right   // 节点的右边界坐标
      rect.top     // 节点的上边界坐标
      rect.bottom  // 节点的下边界坐标
      rect.width   // 节点的宽度
      rect.height  // 节点的高度
 })
 wx.createSelectorQuery().selectViewport().scrollOffset(function(res){
      res.id      // 节点的ID
      res.dataset // 节点的dataset
      res.scrollLeft // 节点的水平滚动位置
      res.scrollTop  // 节点的竖直滚动位置
 })
第四步:可一返回所有的节点信息
query.exec(function(res) { console.log(res) })
微信小程序中的 JavaScript 并不支持像传统浏览器环境中的 `document` 对象来直接操作 DOM,因为微信小程序的页面是由 WXML(类似 HTML 的标记语言)和 WXSS(类似 CSS 的样式表)构成的,并且运行在微信的内嵌浏览器环境中,它没有完整的 DOM API。 在微信小程序中,如果你需要获取元素节点信息,你通常会使用微信提供的 `wx.createSelectorQuery()` API 来进行节点查询。这个方法返回一个 `SelectorQuery` 对象实例,你可以用来查询节点信息获取节点的宽高、左边距等信息,以及节点在页面中的相对位置。 以下是一个简单的示例代码,展示如何在微信小程序获取节点信息: ```javascript // 获取应用实例 const app = getApp() Page({ data: { nodeInfo: {} }, onLoad: function() { // 创建选择器查询 const query = wx.createSelectorQuery() // 选择器使用选择器字符串定位节点,例如选择ID为node的节点 query.select('#node') .boundingClientRect() // 节点布局位置的计算 .exec((res) => { // res 是一个包含所选节点信息的数组 const nodeInfo = res[0] if (nodeInfo) { // 这里可以获取节点的布局信息,如nodeInfo.left, nodeInfo.top等 this.setData({ nodeInfo: nodeInfo }) } }) } }) ``` 在上面的代码中,我们在页面加载时使用了 `wx.createSelectorQuery()` 来查询一个具有特定 ID 的节点,并通过 `boundingClientRect()` 方法获取节点的布局信息。然后通过回调函数中的 `res` 参数获取节点的相关信息,并将其存储在页面数据中。 需要注意的是,微信小程序节点信息的查询是异步执行的,需要通过回调函数来获取查询结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值