问题:我有一些问题想出一种方法来选择我的HTMLDocument中的元素,这些元素位于页面中的某个点之下。
在下面的代码示例中,正如您在评论中看到的那样,我首先选择一部分符合我的queryselector标准的代码
IEDoc.querySelectorAll("td[width='100'][class='ListMainCent'][rowSpan='1'][colSpan='1']")
在这个例子中,我在这个集合中有10个元素。这个元素中的每一个都包含在一个表中,它是7度的父级。
MsgBox TypeName(IEDoc.querySelectorAll("td[width='100'][class='ListMainCent'][rowSpan='1'][colSpan='1']")(2).ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode) ' HTMLTable
其中一些元素在同一张表中。
现在,问题是我只想选择其中一些元素的innerHTML,而不是全部。我知道这10个元素中的一个是否与我感兴趣的标准是它在网页上的位置。我想要消息 Part Usage 下的所有元素。只有一个表包含 Part Usage 文本,因此我的想法是查看每个元素所包含的表是否在"表单中包含更高或更低的索引。采集。 如果索引更高,我想要这个元素,否则我丢弃它。
我为此做的是以下代码:
我将ID Bim 设置为包含一个或多个的所有表 来自10个要素。
For Each Element In IEDoc.querySelectorAll("td[width='100'][class='ListMainCent'][rowSpan='1'][colSpan='1']") ' here for all of the 10 numbers found with the queryselectorall we'll find their respective table in the collection (form) and set its Class as "Bim". But since some of the numbers are in the same table, we won't have 10 tables with a classname "Bim" at the end of the process. We'll have only x tables with the classname "Bim"
Element.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.Class = "Bim"
Next
我将ID 停止设置为包含文本 Part Usage
的表格For Each Element In IEDoc.getElementsByClassName("SectionHead")
If Element.innerHTML = "Part Usage" Then
'MsgBox TypeName(Element.ParentNode.ParentNode.ParentNode)' HTMLTable
Element.ParentNode.ParentNode.ParentNode.ID = "Stop"
End If
Next
我检查具有Classname Bim 的哪些表位于(=更高索引)的表中,其中包含ID Stop 。对于与第3点的标准匹配的表(实际上只有一个),我在其中应用IEDoc.querySelectorAll("td[width='100'][class='ListMainCent'][rowSpan='1'][colSpan='1']")
,这样我就可以得到包含的所有元素,特别是它们的innerHTML。
For Each Element In IEDoc.getElementsByClassName("Bim") ' Here we check all the x tables which have the Classname "Bim"
If Element.indexInTheWholeForm > IEDoc.getElementById("Stop").indexInTheWholeForm Then 'and compare somehow if their index in the (form) collection if higher than the table with the ID "Stop" ( this is similar to checking if the element if lower on the webpage in thic case) ( we only want the element which have a higher index aka under the Part Usage table)
For Each Element2 In Element.querySelectorAll("td[width='100'][class='ListMainCent'][rowSpan='1'][colSpan='1']") ' Now we are in the table which contains the part numbers and we'll look for all the part numbers it contains by applying the queryselectorall again, but this time only in this specific table
array_parts2(iteration2) = Element.querySelectorAll("td[width='100'][class='ListMainCent'][rowSpan='1'][colSpan='1']")(iteration2).innerHTML
ActiveWorkbook.Worksheets(1).Cells(iteration2 + 1, 19) = array_parts2(iteration2)
iteration2 = iteration2 + 1
Next
End If
Next
当然不起作用的是 indexInTheWholeForm 属性,它不存在。关于如何做到这一点的任何想法?
感谢您到达该行:)
答案 0 :(得分:0)
未经测试,但我会做这样的事情(假设我理解正确)
{{1}}
答案 1 :(得分:0)
好的,听起来很意外,我想我找到了解决自己问题的方法。一旦我有可能与我的同事一起运行,我会向你确认它是否有效。 所以我保留了我的初始帖子中的第1点和第2点,并用以下内容替换了第3点:
unexpected token: ?