-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
插件中使用$('#xxx') 可以获取到元素,但是调用.height()会报错 #11966
Comments
这个是由于 function A() {
const id = "abc"
useReady(() => {
const node = $('#' + id);
node.height().then((res) => {
console.log('useReady',res);
});
});
return <View>
<View id={id}>
<Text>一堆文字</Text>
</View>
</View>
} |
hello呀,很抱歉之前没有注意到你issue里写的是在插件内,我根据你的示例仓库又查看了一下,发现这其实是一个小程序本身的问题 说明
在2.0时期,也有人提过类似问题了可以查看这里 而在小程序的插件内部使用 解决方案因为我发现你是在子组件内使用的,大概不能用社区推荐的解决方案 // 获取当前页面实例
const pageInstance = getCurrentPages()[getCurrentPages().length - 1];
// 获取元素尺寸相关信息
Taro
.createSelectorQuery()
.in(pageInstance)
.select('#' + id)
.boundingClientRect((res) => { console.log('onReady', res) })
.exec();
随笔接下来要说的可能和本次issue无关,写出来单纯的因为我在查看这个问题的过程中碰到的有趣(弯路)事 我开始查这个问题的思路大概是这样的 于是我的思路从 _selectorQuery._push = function (t, n, o, r, a) {
// 如果没有用 in 手动圈选过范围的话就用默认的组件,也就是当前页面
null === this._webviewId && (this._webviewId = this._defaultComponent ? this._defaultComponent.__wxWebviewId__ : void 0);
// 这里的e变量,如果存在,则 i 为空,所以在查找时就没有可查元素
var i = e ? "" : __virtualDOM__.getRootNodeId(this._webviewId);
// 任务队列
this._queue.push({
// 押入栈的component就是要查找的根元素id
component: null != n ? 0 === n ? 0 : n.__wxExparserNodeId__ : i,
selector: t,
single: o,
fields: r
}), this._queueCb.push(a || null)
} 这段是在 boundingClientRect = function (e) {
// 利用 _selectorQuery._push 将查询压入栈,后续再用exce执行
return this._selectorQuery._push(this._selector, this._component, this._single, {
id: !0,
dataset: !0,
rect: !0,
size: !0
}, e), this._selectorQuery
} 接下来就比较清晰了,看一下这个 结果查到这里我才意识到,这小程序压根不想让你在插件内能直接查元素啊,必须要手动去指定查找范围。 不过想一下插件所提供的内容大概也就明白了,因为会侵入其他小程序,所以必须要手动进行环境隔离,防止一些意外 然后我就去google了一下,转了一圈又回到了社区看到了解决方案,或许我最开始查到插件内无法使用createSelectorQuery的时候,直接去google一下就不会有这么多事情了,笑 |
感谢 @Barrierml 的热心回复! 首先, 再者,的确插件可以看作是一个小程序自定义组件,使用 Taro 把 |
相关平台
微信小程序
复现仓库
示例代码
小程序基础库: 2.24.6
使用框架: React
复现步骤
在插件的自定义组件中
期望结果
能获取元素高度
实际结果
offset error: #abc query fail
环境信息
The text was updated successfully, but these errors were encountered: