我正在尝试将$'resultsContainer'中的html代码替换为$ response的html。
我的代码不成功的结果是'resultsContainer'的内容仍然存在,并且$ response的html在屏幕上显示为文本而不是被解析为html。
最后,我想在'resultContainer'中注入$ response的内容而不必创建任何新的div,我需要这个:<div id='resultsContainer'>Html inside $response here...</div>
而不是这个:<div id='resultsContainer'><div>Html inside $response here...</div></div>
// Set Config
libxml_use_internal_errors(true);
$doc = new DomDocument();
$doc->strictErrorChecking = false;
$doc->validateOnParse = true;
// load the html page
$app = file_get_contents('index.php');
$doc->loadHTML($app);
// get the dynamic content
$response = file_get_contents('search.php'.$query);
$response = utf8_decode($response);
// add dynamic content to corresponding div
$node = $doc->createElement('div', $response);
$doc->getElementById('resultsContainer')->appendChild($node);
// echo html snapshot
echo $doc->saveHTML();
答案 0 :(得分:1)
如果$ reponse是纯文本:
// add dynamic content to corresponding div
$node = $doc->createTextNode($response);
$doc->getElementById('resultsContainer')->appendChild($node);
如果它(可以)包含html(可以使用createDocumentFragment,但是它会为实体,dtd等创建自己的一组麻烦):
// add dynamic content to corresponding div
$frag = new DomDocument();
$frag->strictErrorChecking = false;
$frag->validateOnParse = true;
$frag->loadHTML($response);
$target = $doc->getElementById('resultsContainer');
if(isset($target->childNodes) && $target->childNodes->length)){
for($i = $target->childNodes->length -1; $i >= 0;$i--){
$target->removeChild($target->childNodes->item($i));
}
}
//if there's lots of content in $target, you might try this:
//$target->parentNode->replaceChild($target->cloneNode(false),$target);
foreach($frag->getElementsByTagName('body')->item(0)->childNodes as $node){
$target->appendChild($doc->importNode($node,true));
}
这表明使用DOMDocuments作为模板引擎确实不适合(或至少很麻烦)。