获取子控件 (Node.child)
Node.child
声明
child_node = node:child()
child_node = node:child(val)
child_nodes = node:child(val1, val2, ...)
参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| val | number | 否 | 获取第 val 个子控件。默认获取所有孩子。(1)=第1个孩子,(-1)=倒数第1个孩子,(1.3)=1-3之间所有孩子,(-1.3)=倒数1-3之间所有孩子,(1,3)=第1个和第3个子控件 |
返回值
| 类型 | 说明 |
|---|---|
| Node 或 table | 结果为一个时返回控件对象,多个时返回列表 |
说明
获取当前控件的子控件。
工作原理:
- 获取当前控件的直接子控件(仅一层,不递归)
- 支持多种灵活的参数格式,可获取单个或多个子控件
参数格式详解:
- 无参数
child()- 获取所有子控件 child(1)- 获取第1个子控件child(-1)- 获取最后1个子控件child(1, 3)- 获取第1个和第3个子控件child(1.3)- 获取第1到第3个子控件(范围)child(-1.3)- 获取倒数第1到第3个子控件
适用场景:
- 遍历列表项
- 获取容器中的特定位置控件
- 按索引定位控件(当无法通过属性区分时)
注意事项:
- 索引从 1 开始,负数表示从末尾计数
- 仅获取直接子控件,不包括孙子控件
- 返回类型取决于结果数量:单个返回 Node,多个返回 table
- 子控件顺序与界面布局顺序一致
待实现
该接口正在开发中。
示例
local node = require("node")
local n = node.selector():id("com.example:id/container"):find()
if n then
-- 获取 n 控件的第一个孩子
local n_child = n:child(1)
if n_child then
print(n_child)
end
-- 获取 n 控件的所有孩子
local n_childs = n:child()
if n_childs then
print(#n_childs)
end
end
AScript 对应
# AScript (Python)
from ascript.android.node import Selector
node = Selector().id("com.aojoy.airscript:id/search_query_section").type("FrameLayout").find()
if node:
node_child = node.child(1)
if node_child:
print(node_child)