收藏
回答

wx.createSelectorQuery()怎么获取当前页面组件中的元素?【解决】

首先,

wx.createSelectorQuery()

这个方法,在当前页面中获取元素,没有问题。在我自定义的组件中获取,也可以。

但现在碰到一个问题,我需要获取一个第三方组件的高度。那么就需要获取该组件内的一个元素的高度。

现在经过各种尝试都无法获取到。

后来发现wx.createSelectorQuery().in(组件),这个方法,可以放个组件进去。但是虽然没有报错,却也没有任何执行结果。

代码类似如下:

wx.createSelectorQuery().in('组件名').select('.组件内元素的class').boundingClientRect(function (res1) {

console.log("res1", res1);

}).exec();

请问大家都是用什么办法在组件外,获取指定组件部分元素的高度的呢?

====================================================

解决办法:

wx.createSelectorQuery().in(this.selectComponent('#navTabs')).select('.van-ellipsis').boundingClientRect(res1 => {

console.log("res1", res1);

}).exec();

给van-tabs加了一个id="navTabs",然后从源码中找到需要获取的class值,然后就获取到了。

最后一次编辑于  2019-11-25
回答关注问题邀请回答
收藏

6 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2019-11-25

    在页面js中

    wx.createSelectorQuery().in(this.selectComponent('#组件id'))...

    ===================

    wxml中

    <第三方组件  id="组件id"></第三方组件>


    2019-11-25
    有用 1
    回复 21
    • Neptune
      Neptune
      2019-11-25
      还是一样,没有结果
      2019-11-25
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2019-11-25回复Neptune
      你怎么写的
      2019-11-25
      回复
    • Neptune
      Neptune
      2019-11-25回复o0o有脾气的酸奶
      const query = wx.createSelectorQuery()
          query.in(this.selectComponent('#myShow')).select('.text').boundingClientRect(function(res) {
            console.log('res1', res)
          })
      2019-11-25
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2019-11-25回复Neptune
      wxml中呢
      2019-11-25
      回复
    • Neptune
      Neptune
      2019-11-25
      2019-11-25
      回复
    查看更多(16)
  • 马力
    马力
    2022-05-19

    同样的问题,我今天折腾了一天,解决思路和你的一样,早点看到这个帖子就好了!

    我是需要获得 <van-field> 的高度,但是 <van-field> 本身没有高度,是子元素撑起来的,所以通过 boundingClientRect 方法 抓到的高度都是 0 。

    试了网上的很多方法,都没用。

    之后,我查看了vant的源码,发现 <van-field> 里面还包含了一个 <van-cell>,所以我以为是 createSelectorQuery 无法抓取 组件的子组件。

    所以给 <can-field> 添加了一个 class=“tellme”,

    let field = this.selectComponent('.title')

            let cell = field.selectComponent(".tellme")

            const query = this.createSelectorQuery().in(cell)

    这样,总算抓到了高度。

    但是,后来直接用

    this.createSelectorQuery().in(this.selectComponent('.title')).select(".tellme").boundingClientRect()

    发现也能抓到高度,懵逼了。

    说了这么多,其实就是想问,你们现在有好的办法了吗?求告知

    2022-05-19
    有用
    回复 1
    • 奋斗小牛
      奋斗小牛
      2023-04-11
      请问大佬获取template的高度怎么写?
      2023-04-11
      回复
  • yuuk
    yuuk
    2020-11-17

    this.selectComponent('#navTabs')

    这个方法具体是咋实现的?

    2020-11-17
    有用
    回复
  • spiritelf(黄钦
    spiritelf(黄钦
    2020-07-24

    之前网上其它方法都不行。这种方法有效。。何解。。搞的郁闷死了。

    2020-07-24
    有用
    回复 1
    • 奋斗小牛
      奋斗小牛
      2023-04-11
      请问大佬获取template的高度怎么写?
      2023-04-11
      回复
  • 零 点 零 一 分 🌻
    零 点 零 一 分 🌻
    2020-03-13

    是的,完美解决问题!感谢

    2020-03-13
    有用
    回复
  • 老张
    老张
    2019-11-25

    外面包一个view。

    2019-11-25
    有用
    回复 5
    • 2019-11-25
      你这个我没看到。抱歉!
      2019-11-25
      回复
    • 2019-11-26
      根据楼上酸奶的提示,了解了你这个方法,做过测试了,可以取到整个组件的高度。谢谢你给我提供了一个新的思路。谢谢!
      2019-11-26
      回复
    • 2019-11-26
      做了个实验,看到数据了解这个相当于用view包这组件,然后获取view的高度,也就相当于组件的高度了。这个是可以的。谢谢你!实际中我这个需求有点另类,我需要的是组件内的一部分元素的高度,所以感觉上那种.in找组件,然后进去后去指定标签的信息,算是我想要的。谢谢你!
      2019-11-26
      回复
    • spiritelf(黄钦
      spiritelf(黄钦
      2020-07-24
      我外面包了一个view 怎么获取到的变成0.高度没有扩展?
      2020-07-24
      回复
    • 奋斗小牛
      奋斗小牛
      2023-04-11
      请问大佬获取template的高度怎么写?
      2023-04-11
      回复
登录 后发表内容
问题标签