DomQuery

2025-12-07 0 887

DomQuery

DomQuery是一个PHP库,可让您轻松地穿越并修改DOM(HTML/XML)。作为图书馆,它旨在提供对PHP Domdocument类(http://ph**p*.net/manual/manual/en/en/book.dom.php)的“ jQuery”。

安装

安装最新版本

$ composer require rct567/dom-query

基本用法

读取属性和属性:

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 ( \' <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

遍历节点(结果集):

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 ;

$ 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

工厂方法(创建实例替代):

DomQuery ;

DomQuery ::create(\'<a title=\”hello\”></a>\’)->attr(\’title\’) // hello\”>

 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

操纵> DOM插入和去除

  • .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也接受阵列或空格分离名称

其他> DOM元素方法|遍历|贮存

  • .get( index )
  • .each ( callable(elm,i) )
  • .data ( key [, val] )
  • .removeData ( [name] )
  • .index ( [selector] )
  • .toArray()
  • .clone()

支持的选择器

  • .class
  • #foo
  • parent > child
  • foo, 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元素

其他(非jQuery)方法

  • findOrFail( selector )在当前匹配元素集中找到每个元素的后代,或抛出异常
  • loadContent(content, encoding=\'UTF-8\')加载html/xml内容
  • xpath(xpath_query)使用xpath在当前匹配元素集中找到每个元素的后代
  • getOuterHtml()获取产生的html描述所有元素(与(string) $dom$elm->prop(\'outerHTML\')

XML支持

  • 如果找到XML声明(属性xml_mode将设置为true),将自动加载XML内容“ AS XML”(XML”)
  • 反过来,这也将使节省(渲染)发生“为XML”。您可以将属性xml_mode设置为false,以防止这种情况。
  • 为了防止使用XML声明加载“ AS XML”的内容,您可以将属性xml_mode设置为false,然后使用loadContent($content)方法。
  • 名称空间会自动注册(无需手动执行)

在选择器中逃脱元字符以找到具有名称空间的元素:

 $ dom -> find ( \' namespace \\\\ :h1 \' )-> text ();

关于

要求

  • 使用PHP 7.2或以上(对于较旧的PHP版本,尝试V0.8)
  • 需要LIBXML PHP扩展(默认启用)

灵感/致谢

  • https://gi*t*hub.*com/wasinger/htmlpagedom
  • https://gi*th*ub.c*om/symfony/dom-crawler
  • https://g*ithub**.com/artack/domquery
  • https://git*hub.*co*m/zendframework/zend-dom
  • http://simplehtmldom.so*u**rceforge.net

下载源码

通过命令行克隆项目:

git clone https://github.com/Rct567/DomQuery.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 DomQuery https://www.zuozi.net/31801.html

ngHandsontable
上一篇: ngHandsontable
sesimos
下一篇: sesimos
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务