Maison > Questions et réponses > le corps du texte
Je souhaite écrire des fonctions qui créent des éléments HTML et ajoutent des éléments enfants les uns aux autres, plutôt que de faire écho à des morceaux de code HTML ou d'utiliser echo <<<HEREDOC
.
createLoginBar
函数将创建一个 div,我会将其附加到其他 HTML 元素到我的 createLogoutBanner
en fonction.
function createLoginBar() { $dom = new DOMDocument(); $login_bar = $dom->createElement('div'); $login_bar->setAttribute("id", "login_bar"); $dom->appendChild($login_bar); return $dom->saveHTML(); } function createLogoutBanner() { $dom = new DOMDocument(); $login_bar = createLoginBar(); $login_flex = createBlankLoginFlex(); $banner_login_form = createBannerLoginForm(); $login_message_flex = createLoginMessageFlex(); $nonmember_signup_flex = createNonSignupFlex(); $not_a_member_form = createNotAMemberForm(); $dom->appendChild($login_bar); //This line gives an error $login_bar->appendChild($login_flex); $login_flex->appendChild($banner_login_form); $login_bar->appendChild($login_message_flex); $login_bar->appendChild($nonmember_signup_flex); $nonmember_signup_flex->appendChild($not_a_member_form); return $dom->saveHTML(); }La ligne
createLogoutBanner
函数中的 $dom->appendChild($login_bar);
donne l'erreur :
Erreur fatale : Uncaught TypeError : DOMNode::appendChild() : le paramètre n°1 ($node) doit être de type DOMNode, donné sous forme de chaîne.
P粉5040809922024-03-31 11:14:36
En raison d'un état d'erreur DOMNode::appendChild()
期望传递一个 DOMNode
.
Votre fonction createLoginBar
renvoie une chaîne au lieu d'un nœud.
Essayez les modifications suivantes :
function createLoginBar() {
$dom = new DOMDocument();
$login_bar = $dom->createElement('div');
$login_bar->setAttribute("id", "login_bar");
$dom->appendChild($login_bar);
return $dom; //->saveHTML();
}
Ensuite, vous verrez l'erreur致命错误:未捕获的 DOMException:错误文档错误
. En effet, vous devez utiliser la même instance parent du DOMDocument pour créer les nœuds enfants. Au lieu de créer un nouveau DOMDocument dans chaque fonction, créez un DOMDocument de niveau supérieur et transmettez-le à chaque fonction à utiliser.
function createLoginBar(DOMDocument $dom):DOMNode
{
$login_bar = $dom->createElement('div');
// the following line will cause invalid html if this function is called more than once
$login_bar->setAttribute("id", "login_bar");
return $login_bar;
}
function createBtn(DOMDocument $dom, string $value):DOMNode
{
$btn = $dom->createElement('button', $value);
$btn->setAttribute("class", "widget");
return $btn;
}
$dom = new DOMDocument();
$login_bar = createLoginBar($dom);
$login_btn = createBtn($dom, 'login');
$login_bar->appendChild($login_btn);
$dom->appendChild($login_bar);
echo $dom->saveHTML();
Résultat :