我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

在上一篇苏南大叔的querylist经验文章中,苏南大叔提到了elements对象。这个概念,其实是贯穿querylist始终的一个概念。所以,这里,有必要单独提出说明一下QL\Dom\Elementsapi功能。

苏南大叔:QueryList 的 QL\Dom\Elements 对象 api 小结 - querylist-elements
QueryList 的 QL\Dom\Elements 对象 api 小结(图1-1)

QL\Dom\Elements

该对象拥有所有phpQuery的方法,也就是说拥有几乎所有与jQuery操作DOM几乎相同的API。下面列出几个常用的QL\Dom\ElementsAPI如下:

  • [HTML属性] 快捷获取html属性
  • map() 元素遍历
  • attr() 获取html属性
  • html() 获取元素的html内容
  • text() 获取元素的text内容
  • attrs() 获取多个元素的html属性
  • htmls() 获取多个元素的html内容
  • texts() 获取多个元素的text内容
  • children() 获取孩子节点

见名思意,这些api函数,都还是比较好理解的。

试验演示demo

要采集的html:

$html = <<<STR
<div id="one">
    <div class="two">
        <a href="http://querylist.cc">QueryList官网</a>
        <img src="http://querylist.com/1.jpg" alt="这是图片" abc="这是一个自定义属性">
        <img src="http://querylist.com/2.jpg" alt="这是图片2">
    </div>
    <span>其它的<b>一些</b>文本</span>
</div>        
STR;
$ql = QueryList::html($html);

快速获取属性

快速获取选中元素的任意属性,同attr()方法.

//获取第一张图片的链接地址
$ql->find('img')->src;
//等价下面这句话
$ql->find('img:eq(0)')->src;
//也等价下面这句话
$ql->find('img')->eq(0)->src;
//获取第一张图片的abc属性
$ql->find('img')->abc;
//获取第二张图片的alt属性
$ql->find('img')->eq(1)->alt;
//等价下面这句话
$ql->find('img:eq(1)')->alt;

map() 元素遍历

返回值为Collection集合对象

$data = $ql->find('img')->map(function($item){
    return $item->alt;
});
print_r($data->all());

输出:

Array
(
    [0] => 这是图片
    [1] => 这是图片2
)

attr() 获取html属性

获取选中元素的任意属性.

//获取第一张图片的链接地址
$ql->find('img')->attr('src');
//获取第一张图片的abc属性
$ql->find('img')->attr('abc');
//获取class为two的元素下的第一个a标签的href属性
$ql->find('.two>a')->attr('href');

attrs() 获取多个元素的html属性

返回值为Collection集合对象

//获取所有的图片链接
$data = $ql->find('img')->attrs('src');
print_r($data->all());

输出:

Array
(
    [0] => http://querylist.com/1.jpg
    [1] => http://querylist.com/2.jpg
)

htmls() 获取多个元素的html内容

返回值为Collection集合对象

$data = $ql->find('#one')->append('<div>追加内容</div>')->find('div')->htmls();
print_r($data->all());

输出:

Array
(
    [0] => <a href="http://querylist.cc">QueryList官网</a>
        <img src="http://querylist.com/1.jpg" alt="这是图片" abc="这是一个自定义属性"><img src="http://querylist.com/2.jpg" alt="这是图片2">
    [1] => 追加内容
)

children() 获取孩子节点

//获取class为two元素下的所有img孩子节点
$data = $ql->find('.two')->children('img')->attrs('alt');
print_r($data->all());
//获取class为two元素下的所有孩子节点
$data = $ql->find('.two')->children()->map(function ($item){
    //用is判断节点类型
    if($item->is('a')){
        return $item->text();
    }elseif($item->is('img'))
    {
        return $item->alt;
    }
});
print_r($data->all());

输出:

Array
(
    [0] => 这是图片
    [1] => 这是图片2
)
Array
(
    [0] => QueryList官网
    [1] => 这是图片
    [2] => 这是图片2
)

相关链接

总结

elements 其实就是 phpquery对象,那么更多的方法也是很多的。这里不做介绍。请关注苏南大叔的更多querylist文章吧。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   querylist