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;