2017-09-19 17:48:48 +08:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Created by PhpStorm.
|
|
|
|
* User: Jaeger <JaegerCode@gmail.com>
|
|
|
|
* Date: 2017/9/19
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace QL\Dom;
|
|
|
|
|
|
|
|
use phpQueryObject;
|
|
|
|
|
2017-09-22 01:51:46 +08:00
|
|
|
/**
|
|
|
|
* Class Elements
|
|
|
|
* @package QL\Dom
|
|
|
|
*
|
|
|
|
* @method Elements toReference($var)
|
|
|
|
* @method documentFragment($state)
|
|
|
|
* @method Elements toRoot()
|
|
|
|
* @method Elements getDocumentIDRef($documentID)
|
|
|
|
* @method Elements getDocument()
|
|
|
|
* @method getDOMDocument()
|
|
|
|
* @method Elements getDocumentID()
|
|
|
|
* @method Elements unloadDocument()
|
|
|
|
* @method isHTML()
|
|
|
|
* @method isXHTML()
|
|
|
|
* @method isXML()
|
|
|
|
* @method serialize()
|
|
|
|
* @method serializeArray($submit)
|
|
|
|
* @method get($index,$callback1,$callback2,$callback3)
|
|
|
|
* @method getString($index,$callback1,$callback2,$callback3)
|
|
|
|
* @method getStrings($index,$callback1,$callback2,$callback3)
|
|
|
|
* @method newInstance($newStack)
|
|
|
|
* @method Elements find($selectors,$context,$noHistory)
|
|
|
|
* @method Elements is($selector,$nodes)
|
|
|
|
* @method Elements filterCallback($callback,$_skipHistory)
|
|
|
|
* @method Elements filter($selectors,$_skipHistory)
|
|
|
|
* @method load($url,$data,$callback)
|
|
|
|
* @method css()
|
|
|
|
* @method show()
|
|
|
|
* @method hide()
|
|
|
|
* @method Elements trigger($type,$data)
|
|
|
|
* @method Elements triggerHandler($type,$data)
|
|
|
|
* @method Elements bind($type,$data,$callback)
|
|
|
|
* @method unbind($type,$callback)
|
|
|
|
* @method Elements change($callback)
|
|
|
|
* @method Elements submit($callback)
|
|
|
|
* @method Elements click($callback)
|
|
|
|
* @method Elements wrapAllOld($wrapper)
|
|
|
|
* @method Elements wrapAll($wrapper)
|
|
|
|
* @method Elements wrapAllPHP($codeBefore,$codeAfter)
|
|
|
|
* @method Elements wrap($wrapper)
|
|
|
|
* @method Elements wrapPHP($codeBefore,$codeAfter)
|
|
|
|
* @method Elements wrapInner($wrapper)
|
|
|
|
* @method Elements wrapInnerPHP($codeBefore,$codeAfter)
|
|
|
|
* @method Elements contents()
|
|
|
|
* @method Elements contentsUnwrap()
|
|
|
|
* @method switchWith($markup)
|
|
|
|
* @method Elements eq($num)
|
|
|
|
* @method Elements size()
|
|
|
|
* @method Elements length()
|
|
|
|
* @method count()
|
|
|
|
* @method Elements end($level)
|
|
|
|
* @method Elements _clone()
|
|
|
|
* @method Elements replaceWithPHP($code)
|
|
|
|
* @method Elements replaceWith($content)
|
|
|
|
* @method Elements replaceAll($selector)
|
|
|
|
* @method Elements remove($selector)
|
|
|
|
* @method markup($markup,$callback1,$callback2,$callback3)
|
|
|
|
* @method markupOuter($callback1,$callback2,$callback3)
|
|
|
|
* @method html($html,$callback1,$callback2,$callback3)
|
|
|
|
* @method xml($xml,$callback1,$callback2,$callback3)
|
|
|
|
* @method htmlOuter($callback1,$callback2,$callback3)
|
|
|
|
* @method xmlOuter($callback1,$callback2,$callback3)
|
|
|
|
* @method Elements php($code)
|
|
|
|
* @method markupPHP($code)
|
|
|
|
* @method markupOuterPHP()
|
|
|
|
* @method Elements children($selector)
|
|
|
|
* @method Elements ancestors($selector)
|
|
|
|
* @method Elements append($content)
|
|
|
|
* @method Elements appendPHP($content)
|
|
|
|
* @method Elements appendTo($seletor)
|
|
|
|
* @method Elements prepend($content)
|
|
|
|
* @method Elements prependPHP($content)
|
|
|
|
* @method Elements prependTo($seletor)
|
|
|
|
* @method Elements before($content)
|
|
|
|
* @method Elements beforePHP($content)
|
|
|
|
* @method Elements insertBefore($seletor)
|
|
|
|
* @method Elements after($content)
|
|
|
|
* @method Elements afterPHP($content)
|
|
|
|
* @method Elements insertAfter($seletor)
|
|
|
|
* @method Elements insert($target,$type)
|
|
|
|
* @method index($subject)
|
|
|
|
* @method Elements slice($start,$end)
|
|
|
|
* @method Elements reverse()
|
|
|
|
* @method text($text,$callback1,$callback2,$callback3)
|
|
|
|
* @method Elements plugin($class,$file)
|
|
|
|
* @method extend($class,$file)
|
|
|
|
* @method Elements _next($selector)
|
|
|
|
* @method Elements _prev($selector)
|
|
|
|
* @method Elements prev($selector)
|
|
|
|
* @method Elements prevAll($selector)
|
|
|
|
* @method Elements nextAll($selector)
|
|
|
|
* @method Elements siblings($selector)
|
|
|
|
* @method Elements not($selector)
|
|
|
|
* @method Elements add($selector)
|
|
|
|
* @method Elements parent($selector)
|
|
|
|
* @method Elements parents($selector)
|
|
|
|
* @method stack($nodeTypes)
|
|
|
|
* @method attr($attr,$value)
|
|
|
|
* @method Elements attrPHP($attr,$code)
|
|
|
|
* @method Elements removeAttr($attr)
|
|
|
|
* @method val($val)
|
|
|
|
* @method Elements andSelf()
|
|
|
|
* @method Elements addClass($className)
|
|
|
|
* @method Elements addClassPHP($className)
|
|
|
|
* @method hasClass($className)
|
|
|
|
* @method Elements removeClass($className)
|
|
|
|
* @method Elements toggleClass($className)
|
|
|
|
* @method Elements _empty()
|
|
|
|
* @method Elements each($callback,$param1,$param2,$param3)
|
|
|
|
* @method Elements callback($callback,$param1,$param2,$param3)
|
|
|
|
* @method data($key,$value)
|
|
|
|
* @method removeData($key)
|
|
|
|
* @method rewind()
|
|
|
|
* @method current()
|
|
|
|
* @method key()
|
|
|
|
* @method Elements next($cssSelector)
|
|
|
|
* @method valid()
|
|
|
|
* @method offsetExists($offset)
|
|
|
|
* @method offsetGet($offset)
|
|
|
|
* @method offsetSet($offset,$value)
|
|
|
|
* @method offsetUnset($offset)
|
|
|
|
* @method whois($oneNode)
|
|
|
|
* @method Elements dump()
|
|
|
|
* @method dumpWhois()
|
|
|
|
* @method dumpLength()
|
|
|
|
* @method dumpTree($html,$title)
|
|
|
|
* @method dumpDie()
|
|
|
|
*/
|
|
|
|
|
2017-09-19 17:48:48 +08:00
|
|
|
class Elements
|
|
|
|
{
|
2017-09-22 01:51:46 +08:00
|
|
|
/**
|
|
|
|
* @var phpQueryObject
|
|
|
|
*/
|
2017-09-19 17:48:48 +08:00
|
|
|
protected $elements;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Elements constructor.
|
|
|
|
* @param $elements
|
|
|
|
*/
|
|
|
|
public function __construct(phpQueryObject $elements)
|
|
|
|
{
|
|
|
|
$this->elements = $elements;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function __get($name)
|
|
|
|
{
|
|
|
|
return property_exists($this->elements,$name)?$this->elements->$name:$this->elements->attr($name);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function __call($name, $arguments)
|
|
|
|
{
|
|
|
|
$obj = call_user_func_array([$this->elements,$name],$arguments);
|
2017-09-19 19:06:16 +08:00
|
|
|
if($obj instanceof phpQueryObject){
|
|
|
|
$obj = new self($obj);
|
|
|
|
}else if(is_string($obj)){
|
|
|
|
$obj = trim($obj);
|
|
|
|
}
|
|
|
|
return $obj;
|
2017-09-19 17:48:48 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
public function map($callback)
|
|
|
|
{
|
|
|
|
$collection = collect();
|
|
|
|
$this->elements->each(function($dom) use(& $collection,$callback){
|
|
|
|
$collection->push($callback(new self(pq($dom))));
|
|
|
|
});
|
|
|
|
return $collection;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function attrs($attr)
|
|
|
|
{
|
|
|
|
return $this->map(function($item) use($attr){
|
|
|
|
return $item->attr($attr);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2017-09-19 19:06:16 +08:00
|
|
|
public function texts()
|
|
|
|
{
|
|
|
|
return $this->map(function($item){
|
|
|
|
return trim($item->text());
|
|
|
|
});
|
|
|
|
}
|
2017-09-19 17:48:48 +08:00
|
|
|
|
2017-09-19 19:06:16 +08:00
|
|
|
public function htmls()
|
|
|
|
{
|
|
|
|
return $this->map(function($item){
|
|
|
|
return trim($item->html());
|
|
|
|
});
|
|
|
|
}
|
2017-09-19 17:48:48 +08:00
|
|
|
}
|