テーブルを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 要素を取得できません。
DOMNode オブジェクトの foreach ループが問題を引き起こす可能性があることを読んで、すべての foreach を同等の for ループに置き換えてみましたが、同じ結果が得られました。