Stars: 115
Forks: 36
Pull Requests: 13
Issues: 29
Watchers: 6
Last Updated: 2023-09-15 21:35:14
PHP library for easy 'jQuery like' DOM traversing and manipulation.
License: MIT License
Languages: PHP
DomQuery is a PHP library that allows you to easily traverse and modify the DOM (HTML/XML). As a library it aims to provide 'jQuery like' access to the PHP DOMDocument class (http://php.net/manual/en/book.dom.php).
Install the latest version with
$ composer require rct567/dom-queryuse Rct567\DomQuery\DomQuery;
$dom = new DomQuery('<div><h1 class="title">Hello</h1></div>');
echo $dom->find('h1')->text(); // output: Hello
echo $dom->find('div')->prop('outerHTML'); // output: <div><h1 class="title">Hello</h1></div>
echo $dom->find('div')->html(); // output: <h1 class="title">Hello</h1>
echo $dom->find('div > h1')->class; // output: title
echo $dom->find('div > h1')->attr('class'); // output: title
echo $dom->find('div > h1')->prop('tagName'); // output: h1
echo $dom->find('div')->children('h1')->prop('tagName'); // output: h1
echo (string) $dom->find('div > h1'); // output: <h1 class="title">Hello</h1>
echo count($dom->find('div, h1')); // output: 2use Rct567\DomQuery\DomQuery;
$dom = new DomQuery('<a>1</a> <a>2</a> <a>3</a>');
$links = $dom->children('a');
foreach($links as $elm) {
echo $elm->text(); // output 123
}
echo $links[0]->text(); // output 1
echo $links->last()->text(); // output 3
echo $links->first()->next()->text(); // output 2
echo $links->last()->prev()->text(); // output 2
echo $links->get(0)->textContent; // output 1
echo $links->get(-1)->textContent; // output 3use Rct567\DomQuery\DomQuery;
DomQuery::create('<a title="hello"></a>')->attr('title') // hello.find( selector ).children( [selector] ).parent( [selector] ).closest( [selector] ).next( [selector] ).prev( [selector] ).nextAll( [selector] ).prevAll( [selector] ).nextUntil( [selector] ).prevUntil( [selector] ).siblings( [selector] ).contents() get children including text nodes.add( selector, [context] ) new result with added elements that match selector.addBack().is( selector ).filter ( selector ) reduce to those that match the selector.not( selector ) remove elements from the set of matched elements.has( selector ) reduce to those that have a descendant that matches the selector.first( [selector] ).last( [selector] ).slice( [offset] [, length]) like array_slice in php, not js/jquery.eq( index ).map( callable(elm,i) )* [selector] can be a css selector or an instance of DomQuery|DOMNodeList|DOMNode
.text( [text] ).html( [html_string] ).append( [content],... ).prepend( [content],... ).after( [content],... ).before( [content],... ).appendTo( [target] ).prependTo( [target] ).replaceWith( [content] ).wrap( [content] ).wrapAll( [content] ).wrapInner( [content] ).remove( [selector] )* [content] can be html or an instance of DomQuery|DOMNodeList|DOMNode
.attr( name [, val] ).prop( name [, val] ).css( name [, val] ).removeAttr( name ).addClass( name ).hasClass( name ).toggleClass ( name ).removeClass( [name] )* addClass, removeClass, toggleClass and removeAttr also accepts an array or space-separated names
.get( index ).each ( callable(elm,i) ).data ( key [, val] ).removeData ( [name] ).index ( [selector] ).toArray().clone().class#fooparent > childfoo, bar multiple selectorsprev + next elements matching "next" that are immediately preceded by a sibling "prev"prev ~ siblings elements matching "siblings" that are preceded by "prev"* all selector[name="foo"] attribute value equal foo[name*="foo"] attribute value contains foo[name~="foo"] attribute value contains word foo[name^="foo"] attribute value starts with foo[name$="foo"] attribute value ends with foo[name|="foo"] attribute value equal to foo, or starting foo followed by a hyphen (-):empty:even:odd:first-child:last-child:only-child:nth-child(n):parent elements that have at least one child node:first:last:header selects h1, h2, h3 etc.:not(foo) elements that do not match selector foo:has(foo) elements containing at least one element that matches foo selector:contains(foo) elements that contain text foo:root element that is the root of the documentfindOrFail( selector ) find descendants of each element in the current set of matched elements, or throw an exceptionloadContent(content, encoding='UTF-8') load html/xml contentxpath(xpath_query) Use xpath to find descendants of each element in the current set of matched elementsgetOuterHtml() get resulting html describing all the elements (same as (string) $dom, or $elm->prop('outerHTML'))xml_mode will be set to true)xml_mode to false to prevent this.xml_mode to false and then use the loadContent($content) method.Escaping meta chars in selector to find elements with namespace:
$dom->find('namespace\\:h1')->text();