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
函數(shù)將創(chuàng)建一個(gè) div,我會(huì)將其附加到其他 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
函數(shù)中的 $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.
En raison d'un état d'erreur DOMNode::appendChild()
期望傳遞一個(gè) 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致命錯(cuò)誤:未捕獲的 DOMException:錯(cuò)誤文檔錯(cuò)誤
. 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?: