跳到主要内容

获取父控件 (Node.parent)

Node.parent

声明

parent_node = node:parent()
parent_node = node:parent(val)
parent_nodes = node:parent(val1, val2, ...)

参数

参数类型是否必填说明
valnumber获取第 val 个父控件。默认获取所有父元素。(2)=爷爷元素,(3)=太爷爷元素,(1,3)=第1和第3个父元素,(1.3)=第1-3之间的所有父元素

返回值

类型说明
Node 或 table结果为一个时返回控件对象,多个时返回列表

说明

获取当前控件的父级控件。

工作原理:

  • 沿着控件树向上遍历,获取指定层级的父控件
  • 支持多种灵活的参数格式,可获取单个或多个父控件

参数格式详解:

  • 无参数 parent() - 获取所有父控件(从直接父到根)
  • parent(1) - 获取直接父控件
  • parent(2) - 获取爷爷控件(父的父)
  • parent(1, 3) - 获取第1个和第3个父控件
  • parent(1.3) - 获取第1到第3个父控件(范围)

适用场景:

  • 从子控件导航到父容器
  • 获取控件的层级结构信息
  • 当子控件不可点击时,向上查找可点击的父控件

注意事项:

  • 根控件(通常是 DecorView)没有父控件
  • 索引从 1 开始,1 表示直接父控件
  • 返回类型取决于结果数量:单个返回 Node,多个返回 table
待实现

该接口正在开发中。

示例

local node = require("node")

local n = node.selector():id("com.example:id/container"):find()

if n then
-- 获取 n 控件的父元素
local nP = n:parent(1)
if nP then
print(nP)
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:
nP = node.parent(1)
if nP:
print(nP)