- Get Started
- 基础
- 进阶
- 技巧
- 插件推荐
- API
- Get Started
- 基础 API
- QueryList html($html)
- string getHtml($rel = true)
- QueryList rules(array $rules)
- QueryList range($selector)
- QueryList removeHead()
- QueryList query(Closure $callback = null)
- Collection getData(Closure $callback = null)
- Array queryData(Closure $callback = null)
- QueryList static getInstance()
- void destruct()
- void destructDocuments() 静态方法
- QueryList pipe(Closure $callback)
- 特殊 API
- 高级 API
- 默认插件
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
元素操作
QueryList不仅可以读取DOM元素的属性值,还可以操作DOM元素。
在采集单元素章节,我们接触到了find()
方法,它用于选择DOM元素,返回值为QL\Dom\Elements
对象,这是QueryList内置的一个DOM元素集合对象,它拥有几乎所有与jQuery操作DOM完全相同的API。
熟悉jQuery的同学应该知道jQuery操作DOM的API方法非常的多,QueryList几乎全部支持,下面选择性的讲些一些元素操作的API,大家举一反三。
替换元素属性值
attr()
方法除了可以取DOM元素属性值外,还有第二个参数,用于设置元素属性值。
text()
方法默认无参调用表示获取元素的纯文本内容,加个参数调用就表示设置元素的内容。
使用场景:比如采集文章时,下载文章中的图片,并替换文章中的图片路径为本地路径。
采集代码:use QL\QueryList;
$html =<<<STR
<div>
<a href="https://querylist.cc" alt="abc">QueryList</a>
</div>
STR;
$ql = QueryList::html($html);
// 获取a元素对象
$link = $ql->find('a:eq(0)');
// 设置元素属性值
$link->attr('href','https://baidu.com');
$link->attr('alt','百度');
// 设置元素内容
$link->text('百度一下');
$data = $ql->find('div')->html();
print_r($data);
采集结果:<a href="https://baidu.com" alt="百度">百度一下</a>
html()
方法用法与text()
方法相同,唯一区别是可以用于设置元素的内容为HTML内容。
$link->html('<p>百度一下</p>');
输出:
<a href="https://baidu.com" alt="百度"><p>百度一下</p></a>
追加元素
append()
方法用于追加元素。
use QL\QueryList;
$html =<<<STR
<div>
<a href="https://querylist.cc" alt="abc">QueryList</a>
</div>
STR;
$ql = QueryList::html($html);
// 获取div元素对象
$div = $ql->find('div:eq(0)');
// 向div元素中追加一个img元素
$div->append('<img src="1.jpg" />');
$rt = [];
$rt[] = $div->find('img')->attr('src');
$rt[]= $ql->find('div')->html();
print_r($rt);
采集结果:Array
(
[0] => 1.jpg
[1] => <a href="https://querylist.cc" alt="abc">QueryList</a>
<img src="1.jpg">
)
移除元素
remove()
方法用于移除元素,常用于移除采集内容中的无关内容,在内容过滤章节有详细讲解到。
$ql->find('div')->remove('img');
替换元素
replaceWith()
方法用于替换元素。
下面例子替换所有链接为文本。
采集代码: use QL\QueryList;
$html =<<<STR
<div>
<a href="https://qq.com">QQ</a>
<a class="ql" href="https://querylist.cc" alt="abc">QueryList</a>
<a href="https://baidu.com">百度一下</a>
</div>
STR;
$ql = QueryList::html($html);
$ql->find('a')->map(function($a){
$text = $a->text();
$a->replaceWith('<span>'.$text.'</span>');
});
$rt = $ql->find('div')->html();
print_r($rt);
采集结果:<span>QQ</span>
<span>QueryList</span>
<span>百度一下</span>
移除元素属性
removeAttr()
方法可用来移除元素属性。
use QL\QueryList;
$html =<<<STR
<div>
<a href="https://qq.com" alt="123">QQ</a>
<a class="ql" href="https://querylist.cc" alt="abc">QueryList</a>
<a href="https://baidu.com">百度一下</a>
</div>
STR;
$ql = QueryList::html($html);
$ql->find('a')->removeAttr('alt');
$rt = $ql->find('div')->html();
print_r($rt);
采集结果:<a href="https://qq.com">QQ</a>
<a class="ql" href="https://querylist.cc">QueryList</a>
<a href="https://baidu.com">百度一下</a>
获取父元素、临近元素
parent()
方法用于获取当前元素的父元素。
next()
和prev()
方法用于获取当前元素临近的下一个元素和上一个元素。
使用场景:当你想选择的元素没有明显的特征,如:class、id等,此时就可以选择与之相关联的元素,通过关联元素选择到你想要选择的元素。
采集代码: use QL\QueryList;
$html =<<<STR
<div>
<a href="https://qq.com">QQ</a>
<a class="ql" href="https://querylist.cc" alt="abc">QueryList</a>
<a href="https://baidu.com">百度一下</a>
</div>
STR;
$ql = QueryList::html($html);
// 获取class为 ql 的元素对象
$link = $ql->find('.ql');
$rt = [];
// 获取父元素的内容
$rt['parent'] = $link->parent()->html();
// 获取临近的下一个元素的内容
$rt['next'] = $link->next()->text();
// 获取临近的前一个元素的属性
$rt['prev'] = $link->prev()->attr('href');
print_r($rt);
采集结果:Array
(
[parent] => <a href="https://qq.com">QQ</a>
<a class="ql" href="https://querylist.cc" alt="abc">QueryList</a>
<a href="https://baidu.com">百度一下</a>
[next] => 百度一下
[prev] => https://qq.com
)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论