为了提高性能,我想执行getElementsByTagName(“td”)而不搜索整个文档。有没有办法缩小搜索这些元素的范围?这是我的代码:
$ie.Document.getElementsByTagName("td") | ? {($_.className -match 'NodeDocument')
这个问题是返回结果需要10分钟以上,我想缩小搜索范围,以便更快,不会返回不需要的元素。
例如,我只想在下面的图像中搜索突出显示的元素,而不是在下面的文件夹中搜索。有没有办法指定只在'常规'文件夹中查看?
感谢任何和所有帮助。谢谢。
感谢您的回复,我将尝试实施XPath。它的价值在于,这是HTML的截图。 #1是'Conventional'文件夹的元素。 #2是文件夹中的第一个文档元素。
更新:尝试了Frodo在Chrome检查器中的$ conventional文件夹上调用.getElementsByTagName()的方法。以下是结果的屏幕截图:
答案 0 :(得分:3)
如何首先找到容器节点并在其中搜索?这会限制你到前。 5 td
- 需要通过where-object
而非1000+过滤的节点,就像您现在可能拥有的那样。
$conventional = $ie.Document.getElementById('OurLibrary_LibTocUC$LandingPanel$toc1$ExpertTree1_nl_23')
$documents = $conventional.getElementsByTagName("td") | ? { $_.className -match 'NodeDocument' }
答案 1 :(得分:0)
解决。我没有引用$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
,.nextSibling
,childNodes
这样的方法是DOM遍历的关键。希望这会有所帮助。