rudestan/domquery

一个简单易用的库,用于选择DOM元素,类似于jQuery的Sizzle。

dev-master 2016-03-11 12:42 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:32:02 UTC


README

domQuery是一个简单小巧的库,用于以jQuery的方式选择DOM元素。它并不是jQuery库的完整替代品,甚至并非所有选择器都已实现,但它已经允许你使用主要的选择器和属性修饰符(例如 name|=, name~= 等)。

使用domQuery编写网站抓取器既简单又快速,因为你不需要使用正则表达式——只需使用domQuery的常规jQuery选择器,并且只需编写几行代码。

实际上,domQuery将jQuery的选择器转换为DOMXPath查询并执行它。库将更新一些新功能、错误修复等。

有一些PHPUnit测试(在test目录中),使用jQuery API文档中的html和选择器。

使用方法

你可以以常规方式创建一个domQuery的新实例,然后执行查询

 $dQ = new domQuery\Selector($doc);
 $dQ->q('.myClass');

或者直接使用静态包装器

 $dQ = domQuery\Selector::i($document)->q('.myClass');

返回的结果是一个对象数组(domQuery\Element的数组),因此你可以像处理常规数组一样处理它们。此外,如果结果数组中只有一个元素,你可以直接访问其方法而不需要索引,例如。

 $dQ = domQuery\Selector::i($document)->q('.myClass')->q('.mySubClass');

domQuery\Element是DOMElement的包装器,但它还包含一些有用的方法,如text()、innerHTML()和outerHTML()。你还可以从domQuery\Element元素运行q()方法,并选择其子元素。

示例

$doc = '
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>class demo</title>
</head>
<body>

<div class="notMe">div class="notMe"</div>
<div class="myClass">div class="myClass"</div>
<span class="myClass">span class="myClass"</span>
<div>
    <div class="parentClass">
        Here goes parent text of the class!
        <p id="idSubElement">
            here is sub element!
        </p>
    </div>
</div>

</body>
</html>
';

// 1. Length and text()

// get the length

$els = domQuery\Selector::i($doc)->q('.myClass');
echo "count is: ".$els->length(); // 2 , there are two elements (DIV and SPAN) with class 'myClass'
echo "\n";

if($els->length()) {
    foreach($els as $el) {
        echo $el->text()."\n"; // echo the text of each element: 1 - div class="myClass", 2 - span class="myClass"
    }
    echo "\n";
}

// 2. Nested selectors

// let's select P element with the id = idSubElement

// there are two ways to do it:

$els = domQuery\Selector::i($doc)->q('.parentClass #idSubElement');

// or

$els = domQuery\Selector::i($doc)->q('.parentClass')->q('#idSubElement');

echo trim($els[0]->text()); // echo trimmed text "here is sub element!"

此外

jQuery选择器的列表:https://api.jqueryjs.cn/category/selectors/

强大的jQuery功能实现:https://github.com/TobiaszCudnik/phpquery

... 以及许多其他不同的jQuery选择器在PHP中的实现 :)