<p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">在开发小程序展开全文组件时需要用到节点查询API - <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">wx.createSelectorQuery()</code> 来查询全文内容的高度。 </p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);"><img src="http://img.80zx.com/ueditor/image/202007/1593850478a23480.jpg" title="f5183c25044d59624caebc12ddce0737" alt="f5183c25044d59624caebc12ddce0737"/></p><ul style="list-style-type: none;" class=" list-paddingleft-2"><li><p><code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">wx.createSelectorQuery()</code> 返回一个 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code> 对象实例。</p></li><li><p><code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code> 有五个方法(<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">in</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">select</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">selectAll</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">selectViewport</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">exec</code>),第一个返回 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code>,后四个返回 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">NodesRef</code>。</p></li><li><p><code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">NodesRef</code> 有四个方法(<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">fields</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">boundingClientRect</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">scrollOffset</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">context</code>),第一个返回 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">NodesRef</code>,后三个返回 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code>。</p></li></ul><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">对照官方提供的示例代码来看</p><pre style="background-color:#262e37;color:#ffffff;font-family:'Consolas';font-size:11.3pt;"><span style="color:#f92672;">const </span>query <span style="color:#f92672;">= </span><span style="color:#660e7a;font-weight:bold;">wx</span>.createSelectorQuery(); <span style="color:#5b7773;background-color:#191f26;">// query </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">是</span><span style="color:#5b7773;background-color:#191f26;"> SelectorQuery </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">对象 如果在组件内查询请使用</span><span style="color:#5b7773;background-color:#191f26;">this</span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">代替</span><span style="color:#5b7773;background-color:#191f26;">wx,</span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">否则有可能无法获取节点的查询信息</span><span style="color:#5b7773;font-family:'宋体';"><br/></span><span style="color:#64a2a2;">query</span>.<span style="color:#4ac60a;">select</span>(<span style="color:#e6db74;">'#the-id'</span>).<span style="color:#660e7a;font-weight:bold;">boundingClientRect</span>(); <span style="color:#5b7773;background-color:#191f26;">// select </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">后是</span><span style="color:#5b7773;background-color:#191f26;"> NodesRef </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">对象,然后</span><span style="color:#5b7773;background-color:#191f26;"> boundingClientRect </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">返回</span><span style="color:#5b7773;background-color:#191f26;"> SelectorQuery </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">对象</span><span style="color:#5b7773;font-family:'宋体';"><br/></span><span style="color:#64a2a2;">query</span>.selectViewport().<span style="color:#660e7a;font-weight:bold;">scrollOffset</span>(); <span style="color:#5b7773;background-color:#191f26;">// selectViewport </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">后是</span><span style="color:#5b7773;background-color:#191f26;"> NodesRef </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">对象,然后</span><span style="color:#5b7773;background-color:#191f26;"> scrollOffset </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">返回</span><span style="color:#5b7773;background-color:#191f26;"> SelectorQuery </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">对象</span><span style="color:#5b7773;font-family:'宋体';"><br/></span><span style="color:#64a2a2;">query</span>.<span style="color:#4ac60a;">exec</span>(<span style="color:#f92672;">function </span>(<span style="color:#fd971f;font-style:italic;">res</span>) { <span style="color:#5b7773;background-color:#191f26;">// exec </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">返回</span><span style="color:#5b7773;background-color:#191f26;"> NodesRef </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">对象</span><span style="color:#5b7773;font-family:'宋体';"><br/></span><span style="color:#5b7773;font-family:'宋体';"> </span><span style="color:#660e7a;font-weight:bold;font-style:italic;">console</span>.<span style="color:#4ac60a;">log</span>(<span style="color:#fd971f;font-style:italic;">res</span>[<span style="color:#ae81ff;">0</span>].<span style="color:#660e7a;font-weight:bold;">top</span>); <span style="color:#5b7773;background-color:#191f26;">// #the-id</span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">节点的上边界坐标</span><span style="color:#5b7773;font-family:'宋体';"><br/></span><span style="color:#5b7773;font-family:'宋体';"> </span><span style="color:#660e7a;font-weight:bold;font-style:italic;">console</span>.<span style="color:#4ac60a;">log</span>(<span style="color:#fd971f;font-style:italic;">res</span>[<span style="color:#ae81ff;">1</span>].<span style="color:#660e7a;font-weight:bold;">scrollTop</span>); <span style="color:#5b7773;background-color:#191f26;">// </span><span style="color:#5b7773;background-color:#191f26;font-family:'宋体';">显示区域的竖直滚动位置</span><span style="color:#5b7773;font-family:'宋体';"><br/></span>});</pre><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">问题:每行执行返回的 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code> 对象是相同的吗?</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">答案:是的,都是同一个对象。</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">问题:直接执行 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query.select('#the-id').boundingClientRect().exec</code> 也可以吗?</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">答案:可以,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">boundingClientRect()</code> 返回就是 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query</code>。</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">问题:这样连写 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query.select('#the-id').boundingClientRect().selectViewport().scrollOffset()</code> 算两条查询请求吗?</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">答案:是两条请求。</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">问题:<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query.exec</code> 执行后会清空前面的查询请求吗?再次执行还能拿到结果吗?</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">答案:可以,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query</code> 不会清空请求。</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">问题:<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">boundingClientRect</code> 和 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">scrollOffset</code> 可以接受 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">callback</code> 参数,它与 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query.exec</code> 执行顺序是怎样,修改 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">res</code> 结果会影响到后面的 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">callback</code> 吗?</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">答案:先执行 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">boundingClientRect</code> 和 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">scrollOffset</code> 的 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">callback</code>,再执行 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query.exec</code> 的 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">callback</code>;修改 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">res</code> 结果会影响到后面 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">exec</code> 的结果。</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">上面的问题通过小程序开发者工具中的 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">WAService.js</code> 源码简单美化还原后可以了解 <code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code> 的代码逻辑</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">SelectorQuery.js</p><pre class="hljs javascript" style="word-break: break-all; margin-top: 10px; margin-bottom: 10px; padding: 15px 20px; border: 0px; vertical-align: baseline; overflow: auto; text-size-adjust: none; font-family: "Source Code Pro", Consolas, Monaco, Menlo, monospace; color: rgb(255, 255, 255); background-color: rgb(39, 40, 34); line-height: 22px; border-radius: 6px;"><code class="hljs javascript" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; display: block; overflow-x: auto; font-size: 12px; text-size-adjust: none; font-family: "Source Code Pro", Consolas, Monaco, Menlo, monospace; color: rgb(248, 248, 242); background: 0px center; text-shadow: rgb(34, 34, 34) 0px 1px;"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">import</span> NodesRef <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">from</span> <span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">'NodesRef'</span>;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">import</span> requestComponentInfo <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">from</span> <span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">'requestComponentInfo'</span>;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">export</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">default</span> <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">pluginId</span>) </span>{ <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-class" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">class</span> <span class="hljs-title" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(166, 226, 46); font-style: italic;">SelectorQuery</span> </span>{
constructor(plugin) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (plugin && plugin.page) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component = <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._defaultComponent = plugin.page; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId = <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._defaultComponent.__wxWebviewId__;
} <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">else</span> { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">var</span> pages = __internalGlobal__.getCurrentPagesByDomain(<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">''</span>); <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._defaultComponent = pages[pages.length - <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">1</span>], <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component = <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">null</span>; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId = <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">null</span>;
} <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queue = []; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queueCb = [];
} <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">in</span>(component) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (!<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId = component.__wxWebviewId__; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component = component;
} <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">else</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId !== component.__wxWebviewId__) { <span class="hljs-built_in" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">console</span>.error(<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">'A single SelectorQuery could not work in components in different pages. A SelectorQuery#in call has been ignored.'</span>);
} <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">else</span> { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component = component;
} <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>;
}
select(selector) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">new</span> NodesRef(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component, selector, <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>);
}
selectAll(selector) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">new</span> NodesRef(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component, selector, <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">false</span>);
}
selectViewport() { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">new</span> NodesRef(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>, <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">0</span>, <span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">''</span>, <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>);
}
_push(selector, component, single, fields, callback) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (!<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId = <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._defaultComponent ? <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._defaultComponent.__wxWebviewId__ : <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">undefined</span>;
} <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> rootNodeId = pluginId ? <span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">''</span> : r.getRootNodeId(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId); <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queue.push({
component: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">null</span> != component ? (<span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">0</span> === component ? <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">0</span> : component.__wxExparserNodeId__) : rootNodeId,
selector,
single,
fields,
}); <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queueCb.push(callback || <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">null</span>);
}
exec(callback) {
requestComponentInfo(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId, {
pluginId,
queue: <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queue,
}, (results) => { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> queueCb = <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queueCb;
results.forEach((res, index) => { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">'function'</span> == <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">typeof</span> queueCb[index]) {
queueCb[index].call(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>, res);
}
}); <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">'function'</span> == <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">typeof</span> callback) {
callback.call(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>, results);
}
})
}
}
}</code></pre><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">requestComponentInfo.js</p><pre class="hljs javascript" style="word-break: break-all; margin-top: 10px; margin-bottom: 10px; padding: 15px 20px; border: 0px; vertical-align: baseline; overflow: auto; text-size-adjust: none; font-family: "Source Code Pro", Consolas, Monaco, Menlo, monospace; color: rgb(255, 255, 255); background-color: rgb(39, 40, 34); line-height: 22px; border-radius: 6px;"><code class="hljs javascript" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; display: block; overflow-x: auto; font-size: 12px; text-size-adjust: none; font-family: "Source Code Pro", Consolas, Monaco, Menlo, monospace; color: rgb(248, 248, 242); background: 0px center; text-shadow: rgb(34, 34, 34) 0px 1px;"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> subscribe = <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">eventType, callback</span>) </span>{ <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> _callback = <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">event, webviewId, nativeInfo = {}</span>) </span>{ <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> { data = {}, options } = event; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> startTime = options && options.timestamp || <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">0</span>; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> endTime = <span class="hljs-built_in" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">Date</span>.now(); <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">'function'</span> == <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">typeof</span> callback) {
callback(data, webviewId);
Reporter.speedReport({
key: <span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">'webview2AppService'</span>,
data,
timeMark: {
startTime,
endTime,
nativeTime: nativeInfo.nativeTime || <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">0</span>,
}
});
}
};
__safeway__.bridge.subscribe(eventType, _callback);
}<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> publish = <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">eventType, data, webviewIds</span>) </span>{ <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> event = {
data,
options: {
timestamp: <span class="hljs-built_in" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">Date</span>.now(),
}
};
__safeway__.bridge.publish(eventType, event, webviewIds);
}<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> requestCb = {};<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">let</span> requestId = <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">1</span>;
subscribe(<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">'responseComponentInfo'</span>, <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">data</span>) </span>{ <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> reqId = data.reqId; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> callback = requestCb[reqId]; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (callback) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">delete</span> requestCb[reqId];
callback(data.res);
}
});<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">export</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">default</span> <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span> <span class="hljs-title" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(166, 226, 46);">requestComponentInfo</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">webviewId, reqs, callback</span>) </span>{ <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> reqId = requestId++; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (!webviewId) { <span class="hljs-built_in" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">console</span>.warn(<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">'An SelectorQuery call is ignored because no proper page or component is found. Please considering using `SelectorQuery.in` to specify a proper one.'</span>); <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span>;
}
requestCb[reqId] = callback,
publish(<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">'requestComponentInfo'</span>,
{
reqId,
reqs,
},
[webviewId],
);
}</code></pre><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: "Microsoft YaHei", Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">NodesRef.js</p><pre class="hljs javascript" style="word-break: break-all; margin-top: 10px; margin-bottom: 10px; padding: 15px 20px; border: 0px; vertical-align: baseline; overflow: auto; text-size-adjust: none; font-family: "Source Code Pro", Consolas, Monaco, Menlo, monospace; color: rgb(255, 255, 255); background-color: rgb(39, 40, 34); line-height: 22px; border-radius: 6px;"><code class="hljs javascript" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; display: block; overflow-x: auto; font-size: 12px; text-size-adjust: none; font-family: "Source Code Pro", Consolas, Monaco, Menlo, monospace; color: rgb(248, 248, 242); background: 0px center; text-shadow: rgb(34, 34, 34) 0px 1px;"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">export</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">default</span> <span class="hljs-class" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">class</span> <span class="hljs-title" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(166, 226, 46); font-style: italic;">NodesRef</span> </span>{
constructor(selectorQuery, component, selector, single) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery = selectorQuery; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component = component; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selector = selector; <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._single = single;
}
fields(fields, callback) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery._push(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selector, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._single,
fields,
callback,
); <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery;
}
boundingClientRect(callback) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery._push( <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selector, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._single,
{
id: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>,
dataset: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>,
rect: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>,
size: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>,
},
callback,
); <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery;
}
scrollOffset(callback) { <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery._push( <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selector, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._single,
{
id: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>,
dataset: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>,
scrollOffset: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>,
},
callback,
); <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery;
}
}</code></pre><p>转载自:<a href="https://imweb.io/topic/5cdba50de363b77a0edeb862">https://imweb.io/topic/5cdba50de363b77a0edeb862</a></p>
微信小程序里面,根据不同的页面跳转需要,有不同的跳转方法,总结如下:(1)保留当前页面,跳转到应用内的某个页面: wx.navigateTo(OBJECT) 这种情况下保存原先打开的页面,可以...
getWxAddress:function(){varthat=this;wx.authorize({scope:'scope.address',success:function(re...