猿问

DOMDocument - appendXML() 不适用于表单

我遇到了 appendXML() 的问题,它不会将表单附加到 HTML。


现在我有这个代码


$domdocument = new DOMDocument();

$domdocument->loadHTML($html);

$domlookup = new DOMXPath($domdocument);

$formDivs = $domlookup->query("//*[contains(@class, 'formClass')]");

$frag = $domdocument->createDocumentFragment();

$frag->appendXML($formHTML);

for ($i = $formDivs->length - 1; $i > -1; $i--) {

    $formDivs->item($i)->parentNode->appendChild($frag);

}

@$html = $domdocument->saveHTML();

该代码运行良好,并使用“formCLass”类简单的 HTML 附加到 div,如文本和带有文本的 div。但是,当涉及到附加表单时……嗯……那是另一回事。


我也尝试过使用


$frag->nodeValue = $formHTML;

代替


$frag->appendXML($formHTML);

但它仍然没有工作......



$frag->textContent = $formHTML;

会将表单输出为文本,显然这对我不起作用。


我怎么解决这个问题?


表格代码:


<form method="post">

<div class="fb-text form-group field-petname">

<label for="petname" class="fb-text-label">

"Pet Name"<span class="fb-required">*</span>

</label>

<input type="text" placeholder="Your Pet Name" required = "required" aria-required = "true" class="form-control" name="petname" id="petname">

</div>

<div class="fb-text form-group field-petowner">

<label for="petowner" class="fb-text-label">

"Pet owner"<span class="fb-required">*</span>

</label>

<input type="text" placeholder="Insert owner's name" required = "required" aria-required = "true" class="form-control" name="petowner" id="petowner">

</div>

<div class="fb-text form-group field-phone">

<label for="phone" class="fb-text-label">

"Phone number"<span class="fb-required">*</span>

</label>

<input type="text" placeholder="Phone number" required = "required" aria-required = "true" class="form-control" name="phone" id="phone">

</div>

<div>

<div id="goldenmembership">

<i class="fas fa-truck"></i>Free delivery!

</div>

</div>

<div class="fb-select form-group field-brand">

<label for="brand" class="fb-select-label">

What brand would your pet like?<span class="fb-required">*</span>

</label>

狐的传说
浏览 68回答 1
1回答

MYYA

我刚刚使用您的代码和我自己的一些 HTML 组合了一个非常简单的测试用例,它似乎可以附加,如下所示。您的表单的 HTML 是否有可能无效?如果您仍然遇到问题,您能否在某处发布您的 HTML,以便我们可以尝试一下,好吗?$html = <<<HTML<html>&nbsp; &nbsp; <body>&nbsp; &nbsp; &nbsp; &nbsp; <div class="formClass">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <!-- Placeholder -->&nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; </body></html>HTML;$formHtml = <<<HTML<form action="#" method="post">&nbsp; &nbsp; <input type="text" id="test"/></form>HTML;$domdocument = new DOMDocument();$domdocument->loadHTML($html);$domlookup = new DOMXPath($domdocument);$formDivs = $domlookup->query("//*[contains(@class, 'formClass')]");$frag = $domdocument->createDocumentFragment();$frag->appendXML($formHtml);for ($i = $formDivs->length - 1; $i > -1; $i--) {&nbsp; &nbsp; $formDivs->item($i)->parentNode->appendChild($frag);}$html = $domdocument->saveHTML();echo $html;HTML 输出:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"><html>&nbsp; &nbsp; <body>&nbsp; &nbsp; &nbsp; &nbsp; <div class="formClass">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <!-- Placeholder -->&nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; <form action="#" method="post">&nbsp; &nbsp; <input type="text" id="test"></form></body></html>
随时随地看视频慕课网APP
我要回答