如何在PHP中将HTML字符串转换为DOMNode以使用DOMNode :: insertBefore?

时间:2018-06-26 15:19:05

标签: php dom-node

在我的PHP项目中,我正在使用DOMDocument获得这样的视图:

页面对象的方法

protected function html_page_template(){
    wp_debug_log();
    $htmlTmpl = new \DOMDocument;
    $html = '<div class="wrap">';
    $html .= $this->writeTopPage();
    $html .= "<hr/>";
    $html .= "</div>";
    $htmlTmpl->loadXML($html);
    $this->current_template->write( $htmlTmpl );
    echo $htmlTmpl->saveXML();
} 

在模板对象($this->current_template中,我有一种write方法来获取页面内容。修改已经注入的HTML也很有用。

模板对象的方法

public function write(&$htmlTmpl)
{

    //Link "Options advanced"
    $link_advanced_options = $htmlTmpl->createElement("a", esc_html( __( "Avanced Options", PLUGIN_DOMAIN ) ) );
    $linkOptionsHrefAttribute = $htmlTmpl->createAttribute("href");
    $linkOptionsHrefAttribute->value = "#";
    $linkOptionsClassAttribute = $htmlTmpl->createAttribute("class");
    $linkOptionsClassAttribute->value = "options-advanced-link";
    $link_advanced_options->appendChild($linkOptionsHrefAttribute);
    $link_advanced_options->appendChild($linkOptionsClassAttribute);
    $htmlTmpl->importNode($link_advanced_options, true);

    //Section "Options advanced
    $section_advanced_options = $htmlTmpl->createElement( "section" );
    $sectionOptionsClassAttribute = $htmlTmpl->createAttribute("class");
    $sectionOptionsClassAttribute->value = "options-advanced-section";
    $section_advanced_options->appendChild($sectionOptionsClassAttribute);

    //Input "From Date"
    $inp_element = $htmlTmpl->createElement( "input" );
    $inpTypeAttribute = $htmlTmpl->createAttribute("type");
    $inpTypeAttribute->value = "date";
    $inpValueAttribute = $htmlTmpl->createAttribute("value");
    $inpValueAttribute->value = "2018-06-25";
    $inp_element->appendChild($inpTypeAttribute);
    $inp_element->appendChild($inpValueAttribute);

    //Button "Download foos"
    $btn_element = $htmlTmpl->createElement("a", "Download foos" );
    $btnClassAttribute = $htmlTmpl->createAttribute("class");
    $btnClassAttribute->value = "add-new-h2 h4a-button";
    $btnHrefAttribute = $htmlTmpl->createAttribute("href");
    $admin_build_url = "myexample.com?run=foo";
    $btnHrefAttribute->value = $admin_build_url;
    $btn_element->appendChild($btnClassAttribute);
    $btn_element->appendChild($btnHrefAttribute);
    $section_advanced_options->appendChild($btn_element);
    $section_advanced_options->appendChild($inp_element);

    $nodeLine = $htmlTmpl->getElementsByTagName("hr")->item(0);
    $parentNode = $htmlTmpl->getElementsByTagName("div")->item(0);
    $parentNode->insertBefore( $section_advanced_options, $nodeLine );
    $parentNode->insertBefore( $link_advanced_options, $section_advanced_options );

} 

为方便起见,我想编写代码以HTML字符串的形式插入并将其转换为DomNode以使用$ parentNode-> insertBefore()。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

像这样使用createdocumentfragment的解决方案si:

模板对象的方法

fractionDigits