0

我正在尝试用 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 循环可能会导致问题,但这会产生相同的结果。

4

0 回答 0