假设您无法访问
Element
类型,只能访问 Node
类型。 (我有这个限制,因为我在 Angular 中使用 inject(ElementRef)
,但还有其他情况可能会发生)
Node
实例没有querySelector
方法,但它有一个childNodes
列表属性,并且每个属性都有自己的childNodes
,依此类推。有了这些,就可以实现搜索算法来在这棵节点树中找到所需的节点,弥补querySelector
的缺失。
我的问题是,这看起来太明显了,听起来它应该是一个原生的东西。它已经存在了吗?或者我可以将节点转换为元素,以便我可以访问本机
querySelector
方法吗?
A
node
可以有不同的类型,例如一个text,一个comment,一个元素attribute,...不能有子元素,即它们的childNodes
始终为空。
对其中之一调用
querySelector
方法是没有意义的。
因此,如果
querySelector
存在于 node
上,并且如果您有一个 node
且 not 也是 Element
,则调用 querySelector
不会得到有用的结果。因此,仅在 Element
上定义它才有意义。
我认为要采取的方法是以某种方式推断/缩小类型
Element
,例如带有用户定义的类型保护。
如果你只需要在某个时候访问
querySelector
,你可以简单地检查 querySelector
方法是否存在,那么 typescript 就不会抱怨。