Rumah > Soal Jawab > teks badan
Saya mahu menulis fungsi yang mencipta elemen HTML dan menambahkan elemen anak antara satu sama lain, dan bukannya menggemakan sebahagian kod HTML atau menggunakan echo <<<HEREDOC
.
createLoginBar
函数将创建一个 div,我会将其附加到其他 HTML 元素到我的 createLogoutBanner
dalam fungsi.
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(); }Baris
createLogoutBanner
函数中的 $dom->appendChild($login_bar);
memberikan ralat:
Ralat maut: Uncaught TypeError: DOMNode::appendChild(): Parameter #1 ($nod) mestilah jenis DOMNode, diberikan dalam rentetan.
P粉5040809922024-03-31 11:14:36
Disebabkan status ralat DOMNode::appendChild()
期望传递一个 DOMNode
.
Fungsi createLoginBar
anda mengembalikan rentetan dan bukannya nod.
Cuba perubahan berikut:
function createLoginBar() {
$dom = new DOMDocument();
$login_bar = $dom->createElement('div');
$login_bar->setAttribute("id", "login_bar");
$dom->appendChild($login_bar);
return $dom; //->saveHTML();
}
Kemudian anda akan melihat ralatnya致命错误:未捕获的 DOMException:错误文档错误
. Ini kerana anda mesti menggunakan contoh induk yang sama bagi DOMDocument untuk mencipta nod anak. Daripada mencipta DOMDocument baharu dalam setiap fungsi, buat DOMDocument peringkat teratas dan hantarkannya kepada setiap fungsi untuk digunakan.
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();
Hasil: