如果我只能访问一个Node,我怎样才能实现像Element.querySelector这样的东西?

问题描述 投票:0回答:1

假设您无法访问

Element
类型,只能访问
Node
类型。 (我有这个限制,因为我在 Angular 中使用
inject(ElementRef)
,但还有其他情况可能会发生)

Node
实例没有
querySelector
方法,但它有一个
childNodes
列表属性,并且每个属性都有自己的
childNodes
,依此类推。有了这些,就可以实现搜索算法来在这棵节点树中找到所需的节点,弥补
querySelector
的缺失。

我的问题是,这看起来太明显了,听起来它应该是一个原生的东西。它已经存在了吗?或者我可以将节点转换为元素,以便我可以访问本机

querySelector
方法吗?

javascript typescript dom queryselector
1个回答
0
投票

A

node
可以有不同的类型,例如一个text,一个comment,一个元素attribute,...不能有子元素,即它们的
childNodes
始终为空。

对其中之一调用

querySelector
方法是没有意义的。

因此,如果

querySelector
存在于
node
上,并且如果您有一个
node
not 也是
Element
,则调用
querySelector
不会得到有用的结果。因此,仅在
Element
上定义它才有意义。

我认为要采取的方法是以某种方式推断/缩小类型

Element
,例如带有用户定义的类型保护

如果你只需要在某个时候访问

querySelector
,你可以简单地检查
querySelector
方法是否存在,那么 typescript 就不会抱怨。

© www.soinside.com 2019 - 2024. All rights reserved.