How to remove an HTML element using the DOMDocumen

2019-01-14 23:20发布

问题:

Is there a way to remove a HTML element by using the DOMDocument class?

回答1:

http://us2.php.net/manual/en/domnode.removechild.php

DomDocument is a DomNode.. You can just call remove child and you should be fine.

EDIT: Just noticed you were probably talking about the page you are working with currently. Don't know if DomDocument would work. You may wanna look to use javascript at that point (if its already been served up to the client)



回答2:

In addition to Dave Morgan's answer you can use DOMNode::removeChild to remove child from list of children:

Removing a child by tag name

//The following example will delete the table element of an HTML content.

$dom = new DOMDocument();

//avoid the whitespace after removing the node
$dom->preserveWhiteSpace = false;

//parse html dom elements
$dom->loadHTML($html_contents);

//get the table from dom
if($table = $dom->getElementsByTagName('table')->item(0)) {

   //remove the node by telling the parent node to remove the child
   $table->parentNode->removeChild($table);

   //save the new document
   echo $dom->saveHTML();

}

Removing a child by class name

//same beginning
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTML($html_contents);

//use DomXPath to find the table element with your class name
$xpath = new DomXPath($dom);
$classname='MyTableName';
$xpath_results = $xpath->query("//table[contains(@class, '$classname')]");

//get the first table from XPath results
if($table = $xpath_results->item(0)){

    //remove the node the same way
    $table ->parentNode->removeChild($table);

    echo $dom->saveHTML();
}   

Resources

http://us2.php.net/manual/en/domnode.removechild.php

How to delete element with DOMDocument?

How to get full HTML from DOMXPath::query() method?