DomQuery
v1.1
Domquery是一個PHP庫,可讓您輕鬆地穿越並修改DOM(HTML/XML)。作為圖書館,它旨在提供對PHP Domdocument類(http://php.net/manual/manual/en/en/book.dom.php)的“ jQuery”。
安裝最新版本
$ composer require rct567/dom-query use 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: 2 use 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 3 use 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()讓孩子在內.add( selector, [context] )新結果,並帶有匹配選擇器的添加元素.addBack() .is( selector ).filter ( selector )將匹配的效果降低到選擇器.not( selector )從匹配元素集中刪除元素.has( selector ).first( [selector] ).last( [selector] ).slice( [offset] [, length]).eq( index ).map( callable(elm,i) )* [選擇器]可以是CSS選擇器或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]可以是html或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和removeAttr也接受陣列或空格分離名稱
.get( index ).each ( callable(elm,i) ).data ( key [, val] ).removeData ( [name] ).index ( [selector] ).toArray().clone() .class#fooparent > childfoo, bar多個選擇器prev + next元素匹配緊接兄弟姐妹的“下一個”prev ~ siblings元素之前是“ prev”*所有選擇器[name="foo"]屬性值等於foo[name*="foo"]屬性值包含foo[name~="foo"]屬性值包含詞foo[name^="foo"]屬性值以foo開頭[name$="foo"]屬性值以foo結束[name|="foo"]屬性值等於foo,或者啟動foo,然後是連字符( - ):empty:even:odd:first-child:last-child:only-child:nth-child(n):parent元素:first:last:header選擇H1,H2,H3等。:not(foo)元素:has(foo)元素:contains(foo)元素:root元素findOrFail( selector )在當前匹配元素集中找到每個元素的後代,或拋出異常loadContent(content, encoding='UTF-8')xpath(xpath_query)使用xpath在當前匹配元素集中找到每個元素的後代getOuterHtml()獲取產生的html描述所有元素(與(string) $dom或$elm->prop('outerHTML') ) xml_mode將設置為true),將自動加載XML內容“ AS XML”(XML”)xml_mode設置為false,以防止這種情況。xml_mode設置為false,然後使用loadContent($content)方法。在選擇器中逃脫元字符以找到具有名稱空間的元素:
$ dom -> find ( ' namespace \ :h1 ' )-> text ();