我试图聚集一个简单的小网站,我可以在其上编辑一个数字。此更改(onblur)将通过AJAX发送到PHP脚本,将编辑后的数字写回HTML文件。
我做到了这一点,但无法让PHP和DOMXpath工作。
网站(index.html):
<div class="actualcount" contenteditable="true">254</div>
使用Javascript:
$.ajax({
url: "save.php",
type: "POST",
data: {postdata: $(".actualcount").html()} ,
})
PHP:
<?php
$editData = $_POST['postdata'];
$newText = '<div class="actualcount" contenteditable="true">'.$editData.'</div>';
$html = file_get_contents('index.html');
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$actualcount = $xpath->query('//*[@class="actualcount"]')->item(0);
$actualcount->parentNode->replaceChild($newText, $actualcount);
$dom->saveHTMLFile("index.html");
?>
它给了我一个
致命错误:未捕获的TypeError:参数1传递给 DOMNode :: replaceChild()必须是DOMNode的一个实例,给定字符串......
感谢您的帮助。
答案 0 :(得分:2)
replaceChild将2个节点元素作为参数,您传递的第一个元素是一个字符串!你需要创建一个元素。
这是DOMDocument::createElement和DOMElement::setAttribute
如何做到这一点的简单示例<?php
if(isset($_POST['postdata'])) {
$editData = (string) $_POST['postdata'];
} else {
$editData = '';
}
$html = file_get_contents('index.html');
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
libxml_clear_errors();
$xpath = new DOMXPath($dom);
$actualcount = $xpath->query('//*[@class="actualcount"]')->item(0);
$newnode = $dom->createElement('div', $editData);
$newnode->setAttribute("class", "actualcount");
$newnode->setAttribute("contenteditable", "true");
$actualcount->parentNode->replaceChild($newnode, $actualcount);
$dom->saveHTMLFile("index.html");
?>