小程序开放平台

文档中心
基础
界面
网络
数据缓存
媒体
位置
开放接口
设备
XHSML
createIntersectionObserver
intersectionObserver
createSelectorQuery
SelectorQuery
nodeRef
性能
文件
数据分析
画布

xhs.SelectorQuery

开发
>
JS API
>
XHSML
>
SelectorQuery
>
更新时间:2024-11-13 19:05:31

查询节点信息的对象

SelectorQuery.exec

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

  • 方法参数 Function callback

示例代码

javascript
  Page({
    data: {
      metrics: []
    },
    onReady() {
      this.queryNodeInfo();
    },
    queryNodeInfo() {
      const query = xhs.createSelectorQuery();
      query.select('.target').boundingClientRect();
      query.exec(res => {
        console.log('节点信息:', res[0]);
        const rect = res[0];
        if (rect) {
            const metrics = []
            for (const key in rect) {
                if (key !== 'id' && key !== 'dataset') {
                    const val = rect[key];
                    metrics.push({key, val});
                }
            }
            this.setData({metrics});
        }
      });
    }
  });

SelectorQuery.in

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

  • 方法参数 Component component

示例代码

javascript
  // 自定义组件逻辑 (custom.js)
  Component({
    methods: {
      // 不能写在引用自定义组件的页面内
      queryMultipleNodes() {
        xhs.createSelectorQuery()
          .in(this)
          .select('.name')
          .boundingClientRect(res => {
            xhs.showModal({
              title: '节点信息为',
              content: JSON.stringify(res)
            });
          }).exec();
      }
    }
  });

SelectorQuery.select

在当前页面下选择第一个匹配选择器 selector 的节点,返回一个 NodesRef 对象实例,可以用于获取节点信息。

  • 方法参数 String selector
  • 返回值 NodesRef

selector 参数说明

类似于 CSS 的选择器,但仅支持下列语法。

  • class选择器(可以连续指定多个):.a-class.another-class
  • 子元素选择器:.the-parent > .the-child
  • 后代选择器:.the-ancestor .the-descendant
  • 多选择器的并集:#a-node, .some-other-nodes

示例代码

javascript
Page({
  data: {
    message: ''
  },
  onReady() {
    this.selectorQuery = xhs.createSelectorQuery();
  },
  queryNodeInfo() {
    console.log(this.selectorQuery.select('.target'));
    // nodeRef: selector: ".target", queryType: "select"
    this.selectorQuery
      .select('.target')
      .boundingClientRect()
      .exec(res => {
        console.log('节点信息:', res[0]);
        this.setData('message', res[0].top);
      });
  }
});

SelectorQuery.selectAll

在当前页面下选择匹配选择器 selector 的节点,返回一个 NodesRef 对象实例。 与 selectorQuery.select(selector) 不同的是,它选择所有匹配选择器的节点。

  • 方法参数 String selector
  • 返回值 NodesRef

示例代码

javascript
Page({
  data: { 
    targetFirst: '',
    targetSecond: ''
  },
  onReady() {
    this.queryNodeInfo();
  },
  queryNodeInfo() {
    const selectorQuery = xhs.createSelectorQuery();
    selectorQuery.selectAll('.target').boundingClientRect();
    selectorQuery.exec(res => {
      this.setData('targetFirst', res[0][0].top);
      this.setData('targetSecond', res[0][1].top);
    });
  }
});

SelectorQuery.selectViewport

选择显示区域,可用于获取显示区域的尺寸、滚动位置等信息,返回一个 NodesRef 对象实例

  • 方法参数 String selector
  • 返回值 NodesRef

示例代码

javascript
Page({
  selectViewport() {
    xhs.createSelectorQuery()
      .selectViewport()
      .scrollOffset(res => {
        console.log('节点信息', res);
        // res.id      // 节点的ID
        // res.dataset // 节点的dataset
        // res.scrollLeft // 节点的水平滚动位置
        // res.scrollTop  // 节点的竖直滚动位置
        xhs.showModal({
          title: 'title',
          content: JSON.stringify(res)
        });
      }).exec()
  }
});