0

我有以下html,

<!DOCTYPE html>
<html>
<body>

<table border="1">
  <tr>
    <th>Month</th>
    <th>Savings</th>
    <th>Savings for holiday!</th>
  </tr>
  <tr>
    <td>January</td>
    <td>$100</td>
    <td rowspan="2">$50</td>
  </tr>
  <tr>
    <td>February</td>
    <td>$80</td>
  </tr>
</table>

</body>
</html>

我想使用jsoup生成下面的html,

<tr>
    <th>Month</th>
    <th>Savings</th>
    <th>Savings for holiday!</th>
  </tr>
  <tr>
    <td>January</td>
    <td>$100</td>
    <td rowspan="2">$50</td>
  </tr>
  <tr>
    <td>February</td>
    <td>$80</td>
    <td>$50</td>
  </tr>

我目前已经编写了这段代码,通过它我可以获得行跨单元及其关联的 td 索引

final Elements rows = table.select("tr");

      int rowspanCount=0;
      String rowspanString ="";
      for(Element row : rows){
          int rowspanIndex = 0;
          for(Element cell: row.select("td")){
              rowspanIndex++;
              if(cell.hasAttr("rowspan")){
                  rowspanCount = Integer.parseInt(cell.attr("rowspan"));

                  rowspanString = cell.ownText();

                  cell.removeAttr("rowspan");
              }
          }
      }
4

3 回答 3

0

可能的提示:对于条件,

cell.hasAttr("rowspan")

获取行索引,例如;

int index = row.getIndex();

然后通过 index+1 获取下一行,例如;

Element eRow = rows.get(index+1);

然后将 td-Element 附加到该行,这将是您的下一行到 rowspan-row。

于 2013-04-22T13:39:09.320 回答
0

您可以使用以下代码简单地附加此行:

Elements rows = table.select("tr > td[rowspan=2]");

for (Element row : rows) {
    row.parent().nextElementSibling().append("<td>$50</td>");
}
于 2013-04-22T18:14:28.823 回答
0

编写完所有代码后,我找到了解决方案。下面是代码,

for (Element row : rows) {
        int cellIndex = -1;
        if(row.select("td").hasAttr("rowspan")){
            for (Element cell : row.select("td")) {
                cellIndex++;
                if (cell.hasAttr("rowspan")) {
                    rowspanCount = Integer.parseInt(cell.attr("rowspan"));
                    cell.removeAttr("rowspan");

                    Element copyRow = row;

                    for (int i = rowspanCount; i > 1; i--) {
                        nextRow = copyRow.nextElementSibling();
                        Element cellCopy = cell.clone();
                        Element childTd = nextRow.child(cellIndex);
                        childTd.after(cellCopy);
                    }
                }
            }
        }
}

它将行跨单元复制到应包含它的所有以下行。同时删除属性 rowspan 以消除任何进一步的差异。

于 2013-04-25T09:13:26.210 回答