【问题标题】:How to combine two table cells in the same table row?如何在同一表格行中合并两个表格单元格?
【发布时间】:2020-02-19 22:18:17
【问题描述】:

如何将datetd/cell 合并到timetd/cell?

我希望表格行包含 3 个单元格,中间的单元格应为 date time

我的代码:

$dom = new DOMDocument;
$dom->loadHTMLFile("test.html");
$dom->validateOnParse = true;
$xpath                = new DOMXPath($dom);
$table = $xpath->query("//*[@class='mytable']//tbody")->item(0);
$td = $table->getElementsbytagname("td");

test.html 文件内容:

<table class="mytable">
  <tbody><tr>
      <td>date</td>
      <td>td1</td>
      <td>time</td>
      <td>td2</td>
    </tr></tbody>
</table>

期望的结果:

<table class="mytable">
  <tbody><tr>
      <td>td1</td>
      <td>date time</td>
      <td>td2</td>
    </tr></tbody>
</table>

【问题讨论】:

  • 您的问题不清楚。该 DOM 是输入还是所需的输出?我们希望看到两者。请编辑您的问题。
  • 它是我想要组合的 php 代码和示例表
  • 这个&lt;td colspan="2"&gt;time date&lt;/td&gt;?
  • @Dlk 是的,我该怎么做
  • 遍历表的行。连接第一个和第三个孩子的内容,放入第一个孩子,并删除第三个孩子。

标签: php parsing merge domdocument tablecell


【解决方案1】:

收集 tbody tr 单元格。使用第一个出现的单元格文本覆盖第三个出现的单元格文本,然后删除第一个单元格。

代码 (Demo)

$html = <<<HTML
<table class="mytable">
  <tbody><tr>
      <td>date</td>
      <td>td1</td>
      <td>time</td>
      <td>td2</td>
    </tr></tbody>
</table>
HTML;

$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
foreach ($xpath->query("//table[@class='mytable']/tbody/tr") as $tr) {
    $tds = $tr->getElementsByTagName("td");
    $tds->item(2)->nodeValue = $tds->item(0)->nodeValue .
                               ' ' . $tds->item(2)->nodeValue;
    $tr->removeChild($tds->item(0));
}
echo $dom->saveHTML();

输出:

<table class="mytable">
  <tbody><tr>

      <td>td1</td>
      <td>date time</td>
      <td>td2</td>
    </tr></tbody>
</table>

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 2023-03-24
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多