phpQuery 網站 (可以直接下載one-file,較方便使用)

phpQuery簡單說就是將jQuery的操作方式移值到PHP上,方便PHP讀取HTML中的內容

使用上必須先引入phpQuery的class

require "phpQuery-onefile.php";

讀取HTML
建立phpQuery 物件(傳入想要操作的HTML)

//init
$pq_obj_1 = phpQuery::newDocumentFileHTML("bb.html");
$pq_obj_2 = phpQuery::newDocumentFileHTML("cc.html");
$pq_obj_3 = phpQuery::newDocumentFileHTML("dd.html");                                                                     

另外有許多phpQuery::newDocument* 方法,可以參考官網

透過Selector取出html內容

//pq等同於jQuery中的$()
$str[1] = pq('div.test',$pq_obj_1)->html();

由於pq是static function,因此預設會去搜尋最後一個產生的document(dd.html),可以傳入phpQuery object來選擇要搜尋哪一個

其他取出html範例

$str[2] = pq('#hd_bar',$pq_obj_2)->html();
$str[3] = pq('li.menu_home',$pq_obj_2)->html();
//預設$pq_obj_3
$str[4] = pq('ul.subnav')->html();

取得特定Attribute的值

$str[6] = pq('div.enews_content a',$pq_obj_2)->attr('href');

透過id選擇phpQuery object

$id = $pq_obj_2->getDocumentID();
$str[5] = pq('#hd_bar',$id)->html();

取出元素文字內容 "首頁"

//<li class="menu_home"><a href="http://blog.johnsonlu.org"><span class="menu1"></span>首頁</a></li>
$str[7] = pq('li.menu_home',$pq_obj_2)->text();

迴圈走訪

foreach(pq('#menu li',$pq_obj_2) as $li) {
    //$li是DOMNode物件,必須轉成phpQuery object
    echo pq($li)->text() . "\n";
}

產生HTML

建立phpQuery 物件(產生一個div)

$doc = phpQuery::newDocument('<div/>');

Append HTML

//可以使用append方法
$doc['div']->append('<ul></ul>');
//也可以使用陣列的方式
$doc['div ul'] = '<li>1</li> <li>2</li> <li>3</li>';

print $doc;

新增class name

$li = null;
$doc['ul > li']
    //每個li加上class name
    ->addClass('my-new-class')
    //filter到最後一個li
    ->filter(':last')
        //最後一個li再新增一個class name
        ->addClass('last-li')
        //assign DOMNode
        ->toReference($li);
//echo 3
echo pq($li)->text();

print $doc;

移動元素位置(將ul從div取出並放到div後面)

$doc['ul']->insertAfter('div');

//也可以這樣寫
phpQuery::selectDocument($doc);
pq('ul')->insertAfter('div');

print $doc;
Categories: PHP