如何在 PHP 中編寫建立和 AppendChild HTML 元素的函數?
P粉814160988
P粉814160988 2024-03-30 21:45:27
0
1
438

我想寫一個建立 HTML 元素並將子元素相互附加的函數,而不是回顯大塊 HTML 程式碼或使用 echo <<<HEREDOC

createLoginBar 函數會建立一個 div,我會將其附加到其他 HTML 元素到我的 createLogoutBanner 函數中。

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();
}

createLogoutBanner 函數中的 $dom->appendChild($login_bar); 行給出錯誤:

致命錯誤:未捕獲類型錯誤:DOMNode::appendChild():參數 #1 ($node) 必須是 DOMNode 類型,字串中給出。

P粉814160988
P粉814160988

全部回覆(1)
P粉504080992

由於錯誤狀態 DOMNode::appendChild() 期望傳遞一個 DOMNode
您的 createLoginBar 函數傳回一個字串而不是節點。
嘗試以下更改:

function createLoginBar() {
    $dom = new DOMDocument();
    $login_bar = $dom->createElement('div');
    $login_bar->setAttribute("id", "login_bar");
    $dom->appendChild($login_bar);
    return $dom; //->saveHTML();
}

然後您將看到錯誤致命錯誤:未捕獲的 DOMException:錯誤文件錯誤。這是因為您必須使用 DOMDocument 的相同父實例來建立子節點。不要在每個函數中建立一個新的 DOMDocument,而是建立一個頂級 DOMDocument 並將其傳遞給每個函數來使用。

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();

結果:

沙箱

#
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板