收藏
回答

SelectorQuery NodesRef.xxx返回null?

p.select('#' + e.currentTarget.dataset.pid) 这一步是有数据返回的,但是下一步boundingClientRect回调就返回null了。

网上说搞个setTimeout,但是好像没有效果。

settimeout没有效果

最后一次编辑于  2020-05-09
回答关注问题邀请回答
收藏

8 个回答

  • 李*
    李*
    2020-07-17

    如果还是获取不到的话,建议wx.createSelectorQuery().in(this)看看?


    wx.createSelectorQuery().in(this).select('#xxxx').boundingClientRect(rect => {       

    console.log(rect.height)

    }).exec();

    2020-07-17
    有用 36
    回复 29
    • 李艺鑫
      李艺鑫
      2020-08-18
      管用!
      2020-08-18
      回复
    • L²⁰²⁴
      L²⁰²⁴
      2020-10-12
      管用!
      2020-10-12
      回复
    • Eliauk
      Eliauk
      2020-12-10
      管用!
      2020-12-10
      1
      回复
    • 白夜.
      白夜.
      2020-12-14
      管用!
      2020-12-14
      回复
    • 袁老头👴
      袁老头👴
      2021-03-30
      管用!
      2021-03-30
      回复
    查看更多(24)
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2020-05-09

    pid ? Pid ?

    js、wxml大小写问题?



    ==============问题所在===============

    id的问题,id不要以数字开头

    

    ps: setTimeout应该不再需要

    若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人

    2020-05-09
    有用 5
    回复 8
    • 非人哉
      非人哉
      2020-05-09
      不是这个问题。
      2020-05-09
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2020-05-09回复非人哉
      那应该是id的问题了,id不要以数字开头

      若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人

      2020-05-09
      4
      回复
    • 非人哉
      非人哉
      2020-05-09
      真胖!
      2020-05-09
      回复
    • 李铁牛
      李铁牛
      2021-12-13回复o0o有脾气的酸奶
      哥  你就是我亲哥
      2021-12-13
      1
      回复
    • Fighting🇨🇳
      Fighting🇨🇳
      2022-03-03
      感谢!
      2022-03-03
      回复
    查看更多(3)
  • 2021-01-27

    官方文档有给出说明:

    SelectorQuery SelectorQuery.in(Component component)

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


    你获取的let p = wx.createSelectorQuery().select("#xxx"); console.log(p), 不出意外属性_component是null吧. 说明你现在的操作不在页面而在组件上.需要in(this)一下

    2021-01-27
    有用 3
    回复
  • 前瑞
    前瑞
    2022-01-04

    我这里出现的问题是因为我在 create 钩子函数(不建议这样做)里面去 调用这个方法,但是这时候节点还没有渲染出来,获取的结果当然是null , settimeout 能够奏效就是节点渲染完才有节点信息返回。旧机型手机性能不太好,所以渲染节点就慢了很多。

    2022-01-04
    有用 1
    回复
  • cxy
    cxy
    2020-10-19
    如果你获取的元素节点上有wx:if或者节点的元素有wx:for。如果是wx:for元素是根据循环渲染的。使用节点获取信息需要在你获取数据接口之后完成渲染才不会返回空的。如果是wx:if的话。应该是同样的道理。你要先看你的元素是否比你调用的
        const query = wx.createSelectorQuery().in(this)
        query.select('#the-id').boundingClientRect(function(res){
          res.top // 这个组件内 #the-id 节点的上边界坐标
        }).exec();
    先显示。如果先显示的话就不会为空。否则是为空的。
    这是我的个人看法。不喜勿喷,谢谢。
    


    2020-10-19
    有用 1
    回复 3
    • 陈大明
      陈大明
      2023-06-25
      我也遇到这个问题,确实这个哥们发现的问题
      2023-06-25
      回复
    • GYP
      GYP
      发表于移动端
      2023-07-12
      遇到这种问题怎么解决呢?
      2023-07-12
      回复
    • echo
      echo
      05-11回复GYP
      nexttick
      05-11
      回复
  • I'm null🧐
    I'm null🧐
    2020-08-14

    小程序这边的问题也太多了吧,啥也获取不到

    2020-08-14
    有用 1
    回复
  • 天刂℡
    天刂℡
    2020-06-05

    var image = this.createSelectorQuery().select(".image").boundingClientRect()

    image.exec(function (res) {

    // res[0].top // #the-id节点的上边界坐标

    // res[1].scrollTop // 显示区域的竖直滚动位置

    console.log("image",res)

    })

    我这里也是 有的是null

    2020-06-05
    有用
    回复 1
    • 非人哉
      非人哉
      2020-06-11
      你这个会不会是有些图片还没有加载出来,方法就执行了?
      2020-06-11
      回复
  • 非人哉
    非人哉
    2020-05-09

    图片的load调用触发这个方法。

    2020-05-09
    有用
    回复 2
    • 婷
      2020-05-14
      在wx:if里面的元素获取不到
      2020-05-14
      回复
    • 非人哉
      非人哉
      2020-05-14回复
      不是啊,是id不能是数字,看楼上那个“有脾气的酸奶”
      2020-05-14
      回复
登录 后发表内容
问题标签