我正在尝试用 div 替换表格,以便它可以在移动设备上正常显示,这是到目前为止的代码。
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->strictErrorChecking = false;
$dom->loadHTML($this->html);
$divID = 0;
foreach ($dom->getElementsByTagName('table') as $table) {
// for each table grab all rows
$rows = array();
$tableDiv = $dom->createElement('div');
$tableDiv->setAttribute('style', 'width: 95%; clear: both; margin: auto;');
$tableDiv->setAttribute('id', 'mobileTableGen_' . $divID . '_' . $page->name);
$divID++;
foreach ($table->getElementsByTagName('tr') as $row) {
$rows[] = $row;
}
foreach ($rows as $row) {
$cols = array();
foreach ($row->childNodes as $col) {
if ($col->nodeType != 3)
$cols[] = $col;
}
$numCols = count($cols);
$width = 100 / $numCols;
$rowDiv = $dom->createElement('div');
$rowDiv->setAttribute('style', 'clear: both; width: 100%;');
$rowDiv->setAttribute('id', 'mobileTableGen_' . $divID . '_' . $page->name);
$divID++;
foreach ($cols as $col) {
$div = $dom->createElement('div');
$div->setAttribute('style', 'width: ' . $width . '%; float: left;');
$div->setAttribute('id', 'mobileTableGen_' . $divID . '_' . $page->name);
$divID++;
foreach ($col->childNodes as $child) {
$div->appendChild($child);
}
$rowDiv->appendChild($div);
}
$tableDiv->appendChild($rowDiv);
}
$table->parentNode->replaceChild($tableDiv, $table);
}
$this->html = $dom->saveHTML();
问题出在这一行:$div->appendChild($child);
孩子总是空白,但我可以得到 nodeValue 就好了。所以我可以从表格中获取每个单元格的文本,但是我无法获取节点子节点的任何 html 元素。
我尝试用等效的 for 循环替换所有 foreach,读到 DOMNode 对象上的 foreach 循环可能会导致问题,但这会产生相同的结果。