Javascript Html Agility Pack在表中循环-将上面的节点作为td添加到表中,直到下一个标记

Javascript Html Agility Pack在表中循环-将上面的节点作为td添加到表中,直到下一个标记,javascript,html,selenium-webdriver,html-agility-pack,Javascript,Html,Selenium Webdriver,Html Agility Pack,我试图循环遍历表,但位置信息被分组使用。如何使用每个表上的位置信息,直到下一个表发生更改?有点困在这里了。也许在每个表中添加h4文本作为td可以解决问题,但我无法做到这一点。我正在使用selenium web驱动程序 因此,每个h4内部文本都将用作表下的位置信息 示例代码: <div> <h4>location1</h4> <table> <colgroup> <col class="colwidth3"&

我试图循环遍历表,但位置信息被分组使用。如何使用每个表上的位置信息,直到下一个表发生更改?有点困在这里了。也许在每个表中添加h4文本作为td可以解决问题,但我无法做到这一点。我正在使用selenium web驱动程序

因此,每个h4内部文本都将用作表下的位置信息

示例代码:

<div>
<h4>location1</h4>
<table>
    <colgroup>
        <col class="colwidth3">
        <col class="colwidth3">
        <col class="colwidth4">
        <col class="colwidth4">
        <col class="colwidth4">
    </colgroup>
    <tbody>
        <tr>
            <td></td>
            <td></td>
            <td>16 May 2017</td>
            <td>fdfds</td>
            <td></td>
        </tr>
    </tbody>
</table>
<h4>location2</h4>
<table>
    <colgroup>
        <col class="colwidth3">
        <col class="colwidth3">
        <col class="colwidth4">
        <col class="colwidth4">
        <col class="colwidth4">
    </colgroup>
    <tbody>
        <tr>
            <td></td>
            <td></td>
            <td>21 May 2017</td>
            <td>ghghhgh</td>
            <td></td>
        </tr>
    </tbody>
</table>
<table>
    <colgroup>
        <col class="colwidth3">
        <col class="colwidth3">
        <col class="colwidth4">
        <col class="colwidth4">
        <col class="colwidth4">
    </colgroup>
    <tbody>
        <tr>
            <td></td>
            <td></td>
            <td>25 May 2017</td>
            <td>hgfhfghfgh</td>
            <td></td>
        </tr>
    </tbody>
</table>
<h4>location3</h4>
<table>
    <colgroup>
        <col class="colwidth3">
        <col class="colwidth3">
        <col class="colwidth4">
        <col class="colwidth4">
        <col class="colwidth4">
    </colgroup>
    <tbody>
        <tr>
            <td></td>
            <td></td>
            <td>29 May 2017</td>
            <td>ghhfhgfhfg</td>
            <td></td>
        </tr>
    </tbody>
</table>
<table>
    <colgroup>
        <col class="colwidth3">
        <col class="colwidth3">
        <col class="colwidth4">
        <col class="colwidth4">
        <col class="colwidth4">
    </colgroup>
    <tbody>
        <tr>
            <td></td>
            <td></td>
            <td>03 Jun 2017</td>
            <td>hjhjhj</td>
            <td></td>
        </tr>
    </tbody>
</table>
<h4>location4</h4>
<table>
    <colgroup>
        <col class="colwidth3">
        <col class="colwidth3">
        <col class="colwidth4">
        <col class="colwidth4">
        <col class="colwidth4">
    </colgroup>
    <tbody>
        <tr>
            <td></td>
            <td></td>
            <td>2 Jul 2017</td>
            <td>jujujuj</td>
            <td></td>
        </tr>
    </tbody>
</table>

地点1
2017年5月16日
FDS
地点2
2017年5月21日
GHGHGH
2017年5月25日
hGFHGH
地点3
2017年5月29日
GHHFHgfg
2017年6月3日
HJHJ
地点4
2017年7月2日
朱吉

如果您可以将h4+表包装成一个div,则可以通过以下方式将所有内容打包到列表中:

var elements = document.querySelectorAll('your_selector');
并迭代:

for (var i = 0; element = elements[i]; i++) {
h4header = element.getElementsByTagName('h4');
location = h4header.value;
table = element.getElementsByTagName('table');
// than you can do your rows via for (var i = 0, row; row = table.rows[i]; i++)
};

但是这个解决方案有点慢

我想出了js解决方案

 function test() {
                var loc = "";
                $('div').children().each(function () {
                    var type = $(this).prop('tagName');
                    if (type == "H4")
                    {
                        loc = $(this).text();
                    }
                    else if (type=="TABLE")
                    {
                        $(this).find('td').eq(0).before('<td>' + loc + '</td>');
                    }
                });
            }
功能测试(){
var loc=“”;
$('div').children().each(函数(){
变量类型=$(this.prop('tagName');
如果(类型==“H4”)
{
loc=$(this.text();
}
else if(类型=“表格”)
{
$(this).find('td').eq(0).before(''+loc+'');
}
});
}

你好,亚历克斯,谢谢你的回答。包装的问题是h4下可能有多个表需要匹配。每个表都需要是另一个单元格,如果h4标记下有两个表,那么它们将是单个单元格。因此,您仍然可以通过:var tables=element.querySelectorAll('your_table_selector')选择多个表;然后一个接一个地进行,有没有办法将h4作为td添加到表中?类似于$('h4').each(function(){$(this).nextUntil('h4').addBack()的内容可能你可以使用.prepend方法…但如果舒尔能做你想做的事,我不是舒尔。我不明白你想做什么。请添加一些示例,发布你尝试过的代码,并解释为什么它不能完成你想要的,包括任何错误消息。