无需搜索整个文档即可在页面上查找元素
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
、.nextSibling
、childNodes
等方法是 DOM 遍历的关键。希望这有帮助。
为了提高性能,我想在不搜索整个文档的情况下执行 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
、.nextSibling
、childNodes
等方法是 DOM 遍历的关键。希望这有帮助。