跳到主要内容

获取子控件 (Node.child)

Node.child

声明

child_node = node:child()
child_node = node:child(val)
child_nodes = node:child(val1, val2, ...)

参数

参数类型是否必填说明
valnumber获取第 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)