无需搜索整个文档即可在页面上查找元素

Find elements on page without searching entire document

为了提高性能,我想在不搜索整个文档的情况下执行 getElementsByTagName("td")。有没有办法缩小搜索这些元素的范围?这是我的代码:

 $ie.Document.getElementsByTagName("td") | ? {($_.className -match 'NodeDocument') 

这个问题是 return 结果需要 10 多分钟,我想缩小搜索范围,这样搜索速度更快,并且不会 return 不需要元素。

举个例子,我只想搜索下图中突出显示的元素,而不是在下面的文件夹中。有没有办法指定只查看 'Conventional' 文件夹?

感谢任何帮助。谢谢。

感谢您的回复,我会尝试实现 XPath。为了它的价值,这里是 HTML 的屏幕截图。 #1 是 'Conventional' 文件夹的元素。 #2 是文件夹中的第一个文档元素。

更新:尝试了 Frodo 在 Chrome 检查器的 $conventional 文件夹上调用 .getElementsByTagName() 的方法。这是结果的屏幕截图:

首先定位容器节点并在其中搜索怎么样?那会把你限制在前。 5 td-需要通过 where-object 过滤的节点,而不是像现在这样的 1000+ 个节点。

$conventional = $ie.Document.getElementById('OurLibrary_LibTocUC$LandingPanel$toc1$ExpertTree1_nl_23')
$documents = $conventional.getElementsByTagName("td") | ? { $_.className -match 'NodeDocument' }

已解决。我没有引用 $conventional 文件夹(我发现它没有 "td" NodeDocuments 作为子文件夹),而是创建了一个新的 $DocContainer 指向一个 div 元素将 NodeDocuments 作为子节点:

$DocContainer = $conventional.parentNode.parentNode.parentNode.parentNode.nextSibling

使用这个 $DocContainer 我现在可以说:

$documents = $DocContainer.getElementsByTagName("td") | ? {($_.className -match 'NodeDocument')

特别感谢 Frode F. 让我想到引用一个实际上是父容器的新元素。

对于其他有类似问题的人:

利用 chrome 检查器/控制台来测试您的元素在 DOM 树中的位置。 Chrome 的内置检查器/控制台非常强大,可以节省很多时间和麻烦。 .parentNode.nextSiblingchildNodes 等方法是 DOM 遍历的关键。希望这有帮助。