PHP createTextNode() 使用 saveHTML() 仅显示文本

PHP createTextNode() is displaying only text using saveHTML()

我正在使用以下代码将 HTML 模板的结构解析为 DOM 选项,然后使用 SQL 查询的结果,我试图生成并将某些 html 片段附加到 dom 对象的父节点,然后回显使用样式生成的 HTML。但是,呈现的 HTML 是原始的 HTML,它没有被设置样式。

有什么想法吗?我正在考虑将这一切移动到 JQuery 而不是 PHP 因为在谷歌搜索之后我无法找到一个直接的解决方案,如果不在 HTML 本身中进行一些 post 处理一个 <script> 标签。

这是模板 HTML,应从中追加节点 (jumbotron HTML):

<!-- CONTENT -->
  <div class="container">

    <div class="row">
      <!--CONTENT DIVs-->
      <div class="jumbotron col-xs-12 col-sm-10 col-sm-push-2" id="contents">

        <!--END OF CONTENT DIVs-->

这里是 PHP 代码:

//Create DOM of the main page
$masterdoc = new DOMDocument();
@$masterdoc->loadHTMLFile($filename);

$masterflag = $masterdoc->getElementById("contents");

//The SQL statement needed
$sql = "SELECT folder_name FROM FOLDERS INNER JOIN LINKAGES ON FOLDERS.id = LINKAGES.child WHERE folder_id = (SELECT id from FOLDERS WHERE folder_name = '" . $foldername . "');";
$result = $conn->query($sql);
$count = $result->num_rows;

//Save all the folder names into an array
$data = array();
$index = 0;
if ($count> 0) {
    while($row = $result->fetch_array()) {
        $data[$index] = $row["folder_name"];
        $index++;
    }
} else {
    echo "0 results";
}
//Loop through the array to generate Jumbotrons and append these to the right section of the main HTML.
for ($x = 0; $x <count($data); $x++) {
  $masterflag->appendChild($masterdoc->createTextNode('<div class="row"><div class="col-xs-2"><i class="fa fa-folder fa-4x"></i></div><div class="col-xs-8"><a href="http://localhost/www/folders.php?link="' . $data[$x] . '" class="btn btn-block" type="content" id="content">' . $data[$x] . '</a></div><div class="col-xs-2"><i class="fa fa-arrow-right fa-4x"></i></div></div><hr>'));
}

echo $masterdoc->saveHTML();

所以你可以看到发生了什么,这是我的页面:

参见 this 回答。您需要使用 DomDocument::createDocumentFragment() 然后将 XML 字符串附加到创建的片段,然后 DomElement::appendChild() 该片段附加到 $masterflag