## 2.0

### Breaking changes

- Minimum PHP version bumped to 7.2
- Remove `__invoke` method from `Document`, `Element` and `DocumentFragment` that was deprecated early
- Remove magic property `Element::$tag`. Use `tagName()` method instead
- Rename `Element::getDocument()` to `ownerDocument()`

### What's new

- Add `Node::setInnerXml()` method (i. e. for `Element` and `DocumentFragment` too)

## 1.18

- Fix a bug when a call of Element::previousSibling() with selector returns a previous sibling when there is not matching element

## 1.17

- Add support of multiple pseudoclasses (#125)

## 1.16.4

- Handle nested pseudo-classes with expression correctly

## 1.16.3

- Fix parsing of a style property in "style" attribute when the value contains a colon

## 1.16.1

- Fix deprecation notice in PHP 8 for `libxml_disable_entity_loader`

## 1.16

- Add `Node::insertSiblingBefore()` and `Node::insertSiblingAfter()` methods for inserting sibling nodes

## 1.15

- Add support of document fragments

## 1.14.1

- Fix an exception when selecting comment element with XPath
- Add support of `DOMCdataSection` nodes
- Add methods `createTextNode()`, `createComment()`, `createCdataSection()` to the Document class

## 1.14

- Add `Element::innerXml()` method

## 1.13

- Add `Element::outerHtml()` method
- Add `Element::prependChild()` method
- Add `Element::insertBefore()` and `Element::insertAfter()` methods
- Add `Element::style()` method for more convenient inline styles manipulation
- Add `Element::classes()` method for more convenient class manipulation

## 1.12

- Many fixes and improvements

## 1.11.1

- Fix bug with unregistered PHP functions in XPath in `Document::has()` and `Document::count()` methods

## 1.11

- Add `Element::isElementNode()` method
- Add ability to retrieve only specific attributes in `Element::attributes()` method
- Add `Element::removeAllAttributes()` method
- Add ability to specify selector and node type in `Element::previousSibling()` and `Element::nextSibling()` methods
- Add `Element::previousSiblings()` and `Element::nextSiblings()` methods
- Many minor fixes and improvements

## 1.10.6

- Fix bug with XML document loading

## 1.10.5

- Fix issue #85

## 1.10.4

- Use `mb_convert_encoding()` in the Encoder if it is available

## 1.10.3

- Add `Element::removeChild()` and `Element::removeChildren()` methods
- Fix bug in `Element::matches()` method
- `Element::matches()` method now returns false if node is not `DOMElement`
- Add `Element::hasChildren()` method

## 1.10.2

- Fix bug in setInnerHtml: can't rewrite existing content
- Throw `InvalidSelectorException` instead of `InvalidArgumentException` when selector is empty

## 1.10.1

- Fix attributes `ends-with` XPath
- Method `Element::matches()` now can check children nodes

## 1.10

- Fix HTML saving mechanism
- Throw `InvalidSelectorException` instead of `RuntimeException` in Query class

## 1.9.1

- Add ability to search in owner document using current node as context
- Bugs fixed

## 1.9.0

- Methods `Document::appendChild()` and `Element::appendChild()` now return appended node(s)
- Add ability to search elements in context

## 1.8.8

- Bugs fixed

## 1.8.7

- Add `Element::getLineNo()` method

## 1.8.6

- Fix issue #55

## 1.8.5

- Add support of `DOMComment`

## 1.8.4

- Add ability to create an element by selector
- Add closest method

## 1.8.3

- Add method `Element::isTextNode()`
- Many minor fixes

## 1.8.2

- Add ability to check that element matches selector
- Add ability counting nodes by selector
- Many minor fixes

## 1.8.1

- Small fix

## 1.8

- Bug fixes
- Add support of ~ selector
- Add ability to direct search by CSS selector
- Add setInnerHtml method
- Add attributes method

## 1.7.4

- Add support of text nodes

## 1.7.3

- Bug fix

## 1.7.2

- Fixed behavior of nth-child pseudo class
- Add nth-of-type pseudo class

## 1.7.1

- Add pseudo class has and more attribute options

## 1.7.0

- Bug fixes
- Add methods `previousSibling`, `nextSibling`, `child`, `firstChild`, `lastChild`, `children`, `getDocument` to the Element
- Changed behavior of parent method. Now it returns parent node instead of owner document

## 1.6.8

- Bug fix

## 1.6.5

- Added ability to get an element attribute by CSS selector

## 1.6.4

- Added handling of `DOMText` and `DOMAttr` in `Document::find()`

## 1.6.3

- Added ability to get inner HTML

## 1.6.2

- Added the ability to pass options when load HTML or XML

## 1.6.1

- Added the ability to pass an array of nodes to appendChild
- Added the ability to pass options when converting to HTML or XML
- Added the ability to add child elements to the element

## 1.6

- Added support for XML
- Added the ability to search element by part of attribute name or value
- Added support for pseudo-class "contains"
- Added the ability to clone a node

## 1.5.1

- Added ability to remove and replace nodes
- Added ability to specify encoding when converting the element into the document

## 1.5

- Fixed problem with incorrect encoding
- Added ability to set the value of the element
- Added ability to specify encoding when creating document

## 1.4

- Added the ability to specify the return type element (`DiDom\Element` or `DOMElement`)

## 1.3.2

- Bug fixed

## 1.3.1

- Bugs fixed
- Added the ability to pass element attributes in the constructor

## 1.3

- Bugs fixed

## 1.2

- Bugs fixed
- Added the ability to compare Element\Document
- Added the ability to format HTML code of the document when outputting

## 1.1

- Added cache control
- Converter from CSS to XPath replaced by faster

## 1.0

- First release