queryMultipleNodes (){
const query = wx.createSelectorQuery().in(this)
query.select('#the-id').boundingClientRect(function(res){
res.top // 这个组件内 #the-id 节点的上边界坐标
}).exec()
}
微信文档里面关于createSelectorQuery的使用大概就是这样的,今天我没仔细看。我的想法是首先我在onLoad里面声明一个全局的query,然后我需要查询某个节点的信息的时候我就用这个query去查询就好了。大概是下面这种样子:
let query page{ onLoad: function (){ query = wx.createSelectorQuery(). in ( this ) }, setStatus: function (index){ let that = this query.select( "#id" + index).boundingClientRect( function (res){ console.log(res) }) } }).exec() } } |
代码一跑起来,因为会根据这个切背景色,开发工具直接变霓虹灯了。这个query会在下次调用的时候,返回之前所有query过的节点,比如说点击顺序id0->id2->id4->id7,query返回的结果就是[0],[0,2],[0,2,4],[0,2,4,7]这样的包含节点信息的数组。我看过代码,可以确定这个函数每次点击只会调用一次,但是query会按照你点击过的节点返回所有的信息。
看了一下exec函数的说明:
NodesRef SelectorQuery.exec(function callback)
执行所有的请求。请求结果按请求次序构成数组,在callback的第一个参数中返回。
可能是这里exec以后并不会清除之前select的节点信息而是会返回所有的请求,但是也没有提供一个清除之前查询过节点的接口。虽然不是bug,但是用起来感觉接口还是不够傻瓜啊。。。
你也发现了, 这个很弱智的. 而且相同的查询词不会合并, 查了几次就会返回多大的数组.