Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove an HTML element using the DOMDocument class

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

like image 849
Elitmiar Avatar asked Jul 23 '09 13:07

Elitmiar


People also ask

How do you remove an element from an HTML document?

HTML DOM Element remove() The remove() method removes an element (or node) from the document.

How do you delete an element in CSS?

You cannot remove an element from the DOM tree using CSS. You can only prevent it from being rendered in the layout with display: none ; doing so does not prevent it from responding to events or cause it to be ignored by CSS selectors such as + and :nth-child() .

How do you remove an element from a DOM?

To remove an element from the DOM, you follow these steps: First, select the target element that you want to remove using DOM methods such as querySelector() . Then, select the parent element of the target element and use the removeChild() method.


2 Answers

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?

like image 122
RafaSashi Avatar answered Oct 09 '22 06:10

RafaSashi


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)

like image 33
Dave Morgan Avatar answered Oct 09 '22 06:10

Dave Morgan