Skip to content

components hParse

tolizhan edited this page May 22, 2020 · 2 revisions

hParse的使用

hParse的职责

  • 使php可以用jQuery方式来操作html字符串 特殊说明如下:
    1. 未实现与样式相关的伪类及方法,如:hide和:show的伪类和方法
    2. 样式操作时未实现继承关系,如:css('display')读取隐藏属性; :contains伪类不判断标签块类型,均按内联类型处理.
    3. jQuery中方法名在php中为关键词的,后面追加's',如:clones代替clone; emptys代替empty
    4. 未实现jQuery的each等遍历方法,但扩展了一些方法使其返会数组,如:eq(),text()
    5. 方法m代替jQuery的方法$
  • 创建一个hParse对象,new of_base_com_hParse($arg = '')

    • $arg传入需要解析的字符串
      返回一个包含解析节点的父节点对象
    <?php
    $hParseObj = new of_base_com_hParse('<div style="background-color:blue;"></div>');
  • $hParseObj->m($context, $rootObj = null)多功能生成器jQuery的$代替方法

    $contextstring, object
    对象=克隆一个新的对象(使用clone关键词),第一位为'<'的字符串=解析html,其他字符串=选择器
    $rootObjstring, object, boolean
    context为文本时有效,查询的根目录,字符串=与context描述一致,true=强制文本解析,false=强制解析为不编码的文本节点器,null=从当前根本目录开始解析
    <?php
    $hParseObj->m('div');                   //查询div标签
    $hParseObj->m('[@^attr=value@i]');      //可以通过m或find等方法以"@"开通正则匹配"属性名=属性值"
    $hParseObj->m('<div>');                 //解析一个字符串
    $hParseObj->m('</>创建纯文本借点');     //通过 '</>'xxx 这种方式可以创建纯文本节点
  • $hParseObj->attr($attr, $value = null)为指定元素设置一个或多个属性

    $attrstring, array
    字符串=读取或设置属性名,数组=同时修改多个属性{属性名:属性值}
    实现的特殊属性:
    tagName : 读取标签名(只读)
    outerHTML : 读取或设置自身节点的html内容
    innerHTML : 读取或设置其子节点的html内容(对允许有子节点的标签有效)
    textContent : 读取或设置其子节点text内容(对允许有子节点的标签有效)
    >tagState::end : 是否结束标签正确关闭, 1=正确, 0=缺失
    >tagLine::start : 节点在源文件的行数
    >attrLine::属性名 : 属性在源文件的行数
    >attrQuote::属性名 : 属性在源文件的引号(双引:'"',单引:"'",空字符:"")
    空字符串 : 为了满足php中的某些特殊需求,设置了这个特殊属性,传入这里的值都不会经过编码输出 (文本节点修改文本内容,常规节点添加属性)
    $valuestring
    attr为字符串时使用,对应属性值
<?php
$hParseObj->m('div')->attr('kk', '<?php');    //kk的值为&lt;?php
$hParseObj->m('div')->attr('', 'kk="<?php"');    //kk的值为<?php
  • $hParseObj->contents($type = true)获得每个匹配元素集合元素的子元素,包括文字和注释节点

    $selector
    true(默认)=获取直接子元素,false=获取子孙全部元素,null=获取子孙非文本类元素,字符串=获取子孙为指定标签名的元素
  • $hParseObj->doc($type = 'obj', $mode = true)输出文档节点

    $typestring
    obj(默认)=返回根文档对象,str=返回字符串
    $modebool
    type为str时有效, true=补全未闭合标签, false=按原解析方式(包括未匹配的结束标签)
    <?php
    $hParseObj->m('div')->doc('obj');    //返回$hParseObj对象
    $hParseObj->m('div')->doc('str');    //返回$hParseObj转换的html字符
  • $hParseObj->eq($index = null)获取匹配集合中指定的元素与jQuery不同,加了一个null参数

    $indexint
    数字=返回包含指定索引节点的对象,null(默认)=返回包含每个节点对象的数组
    <?php
    $hParseObj->m('div')->eq();    //返回包含每个div对象的数组
    $hParseObj->m('div')->eq(1);    //返回第二个元素的对象
  • $hParseObj->get($nodeList = true)返回对象内部属性与jQuery不同,这个方法仅为比对两个对象是否相同存在

    $nodeListboolean
    true=返回节点列表, false=返回所有属性{'callerObj' : 上一次调用的对象, 'docNodeKey' : 文档个根节点, 'nodeList' : 包含的节点列表}
    <?php
    $hParseObj->m('div')->get();            //返回包含节点的数组[节点键,节点键...] 配合节点键操作方法提升性能
    $hParseObj->m('div')->get(false);       //返回对象属性
  • $hParseObj->html($text = false, $mode = true)读取或设置匹配节点的innerHTML值

    $text
    false(默认)=获取第一个元素中innerHTML内容, true=获取第一个元素中outerHTML内容, 字符串=设置每一个匹配元素的innerHTML内容
    $mode
    text为bool时有效, true=补全未闭合标签, false=按原解析方式(包括为匹配的结束标签)
  • $hParseObj->text($str = null)得到匹配元素集合中每个元素的文本内容结合,包括他们的后代与jQuery不同,加了一个null参数

    $strboolean
    true=返回包含每个字符串节点对象的数组,false=返回包含字符串内容的数组,null(默认)=从匹配的元素中获取文本内容,字符串=设置每一个匹配元素的文本内容

以下详细说明及演示请参看jQuery文档

  • $hParseObj->add($selector, $context = null)添加元素到匹配的元素集合

    $className, $context
    与m的方法参数相同
  • $hParseObj->andSelf()添加先前的堆栈元素集合到当前组合

    无参数
  • $hParseObj->filter($selector)筛选出与指定表达式匹配的元素集合

    $selector
    选择符,HParse对象
  • $hParseObj->slice($start, $end)减少匹配元素集合由索引范围到指定的一个子集

    $start
    一个整数,指示0的位置上的元素开始被选中.如果为负,则表示从集合的末尾的偏移量
    $end
    一个整数,指示0的位置上被选中的元素停止.如果为负,则表示从集合的末尾的偏移量.null=持续到集合的末尾
  • $hParseObj->addClass($className)为每个匹配的元素添加指定的类名

    $classNamestring
    为每个匹配元素所要增加的一个或多个样式名,多个样式用空格分离
  • $hParseObj->hasClass($className)检查匹配的元素是否含有某个特定的类

    $classNamestring
    检查的样式名,多个样式用空格分割
  • $hParseObj->removeClass($className)移除每个匹配元素的一个,多个或全部样式

    $classNamestring
    移除的样式名,多个样式用空格分割
  • $hParseObj->removeAttr($attr)为匹配的元素集合中的每个元素中移除一个属性

    $attrstring
    指定一个属性名
  • $hParseObj->css($name, $value = null)为匹配的元素集合中获取第一个元素的样式属性值 仅实现解析赋值,没实现继承关系

    $namestring, array
    字符串=一个css属性名,数组=同时修改多个属性{属性名:属性值}
    $valuestring
    一个CSS属性名的值, ""=删除属性
  • $hParseObj->val($value = null)读取或设置匹配的节点的值

    $valuestring
    null(默认)=获取匹配的元素集合中第一个元素的当前值,字符串=设置匹配的元素集合中每个元素的值
  • $hParseObj->before($content, $rootObj = null)根据参数设定在匹配元素的前面(外面)插入内容

    $content, $rootObj
    与m的方法参数相同
  • $hParseObj->insertBefore($attr)选择符,HTML字符串或者HParse对象

    $content, $rootObj
    与m的方法参数相同
  • $hParseObj->after($name, $value = null)根据参数设定在每一个匹配的元素之后插入内容

    $content, $rootObj
    与m的方法参数相同
  • $hParseObj->insertAfter($value = null)在目标后面插入每个匹配的元素

    $content, $rootObj
    与m的方法参数相同
  • $hParseObj->prepend($name, $value = null)将参数内容插入到每个匹配元素的前面(元素内部)

    $content, $rootObj
    与m的方法参数相同
  • $hParseObj->prependTo($name, $value = null)将所有元素插入到目标前面(元素内)

    $content, $rootObj
    与m的方法参数相同
  • $hParseObj->append($name, $value = null)根据参数设定在每个匹配元素里面的末尾处插入内容

    $content, $rootObj
    与m的方法参数相同
  • $hParseObj->appendTo($name, $value = null)与append方法相反

    $content, $rootObj
    与m的方法参数相同
  • $hParseObj->replaceWith($name, $value = null)用提供的内容替换所有匹配的元素

    $content, $rootObj
    与m的方法参数相同
  • $hParseObj->replaceAll($name, $value = null)用匹配元素替换所有目标元素

    $content, $rootObj
    与m的方法参数相同
  • $hParseObj->children($selector = '')获得每个匹配元素集合元素的子元素,选择性筛选的选择器

    $selector
    一个用于匹配元素的选择器字符串
  • $hParseObj->find($selector, $rootObj = '')获得当前元素匹配集合中每个元素的后代,选择性筛选的选择器

    $selector, $rootObj
    与m的方法参数相同
  • $hParseObj->clones()深度复制匹配的元素

    无参数
  • $hParseObj->emptys()移除所有匹配节点的子节点

    无参数
  • $hParseObj->end()终止在当前链的最新过滤操作,并返回匹配的元素集合为它以前的状态

    无参数
  • $hParseObj->remove($selector)移除所有匹配节点

    $selector
    一个选择表达死用来过滤匹配的将被移除的元素
  • $hParseObj->first()获取元素集合中第一个元素

    无参数
  • $hParseObj->last()获取元素集合中最后一个元素

    无参数
  • $hParseObj->has($selector)选择含有选择器所匹配的至少一个元素的元素

    $selector
    选择符,HParse对象
  • $hParseObj->not($selector)删除匹配的元素集合中元素

    $selector
    选择符,HParse对象
  • $hParseObj->is($selector)检查当前匹配的元素集合是否匹配

    $selector
    一个选择器或者对象
  • $hParseObj->index($selector = null)从匹配的元素中搜索给定元素的索引值

    $selector
    null(默认)=当前集合第一个节点在它同辈节点的位置
    选择符 =当前集合第一节点在选择器中的位置
    对象 =对象中的第一节点在当前集合中的位置
  • $hParseObj->size()返回当期对象匹配包含节点数量

    无参数
  • $hParseObj->next($selector)取得一个包含匹配的元素集合中每一个元素紧邻的后面同辈元素的元素集合

    $selector
    一个选择器
  • $hParseObj->nextAll($selector)取得一个包含匹配的元素集合中每一个元素全部的后面同辈元素的元素集合

    $selector
    一个选择器
  • $hParseObj->nextUntil($selector)取得一个包含匹配的元素集合中每一个元素后面直到匹配前的同辈元素的元素集合

    $selector
    一个选择器
  • $hParseObj->parent($selector)取得一个包含匹配的元素集合中每一个元素紧邻的父辈元素的元素集合

    $selector
    一个选择器
  • $hParseObj->parents($selector)取得一个包含匹配的元素集合中每一个元素全部的父辈元素的元素集合

    $selector
    一个选择器
  • $hParseObj->parentsUntil($selector)取得一个包含匹配的元素集合中每一个元素前面直到匹配前的父辈元素的元素集合

    $selector
    一个选择器
  • $hParseObj->prev($selector)取得一个包含匹配的元素集合中每一个元素紧邻的前面同辈元素的元素集合

    $selector
    一个选择器
  • $hParseObj->prevAll($selector)取得一个包含匹配的元素集合中每一个元素全部的前面同辈元素的元素集合

    $selector
    一个选择器
  • $hParseObj->prevUntil($selector)取得一个包含匹配的元素集合中每一个元素前面直到匹配前的同辈元素的元素集合

    $selector
    一个选择器
  • $hParseObj->closest($selector)从元素本身开始,逐级向上级元素匹配

    $selector
    一个选择器
  • $hParseObj->siblings($selector)获得匹配元素集合中每个元素的兄弟元素

    $selector
    一个选择器
  • $hParseObj->unwrap()将匹配元素的父级元素删除,保留自身(和兄弟元素,如果存在)在原来的位置

    无参数
  • $hParseObj->wrap($wrap, $rootObj = null)在每个匹配的元素外层包上一个html元素

    $wrap, $rootObj
    与m的方法参数相同
  • $hParseObj->wrapAll($wrap, $rootObj = null)在所有匹配元素外面包一层HTML结构

    $wrap, $rootObj
    与m的方法参数相同
  • $hParseObj->wrapInner($wrap, $rootObj = null)在匹配元素里的内容外包一层结构

    $wrap, $rootObj
    与m的方法参数相同

面向节点键操作速度更快

hParse::selectors($nodeKeys, $selector, $isChild = true)选择器

nodeKeys
指的选择器的根节点键,数组
selector
筛选字符串,以jQuery为参照
isChild
true(默认)=从子节点开始,false=从自身节点开始

hParse::nodeAttr($nodeKey, $attr = null, $value = null)读取指定节点键属性

nodeKeys
指定遍历的节点键
attr
属性名称,null=读取所有真实属性
value
字符串=设置属性,null(默认)=读取属性,false=删除属性

hParse::nodeConn($nodeKey, $type, $needle = false, $textNode = false, $autoKey = true)读取与指定节点相关系的节点

nodeKey
指定查询的节点键,数字
type
查询类型,sibling=不包含自己全部兄弟节点,next=之后的兄弟节点,prev=之前的兄弟节点,parent=父节点,child=子节点
needle
对结果集进行筛选,false(默认)=不筛选返回数组,数字=取出指定位置的节点键(支持负数)
textNode
是否包含文本或碎片节点,false(默认)=不包含,true=包含
autoKey
自增键,needle为false时有效,true(默认)=连续的键值,false=以节点键为键

hParse::nodeSplice($nNodeKey, $pNodeKey = null, $insType = false)移除或插入指定节点

nodeKeys
指定移除或插入的节点键,数字
pNodeKey
null=移除节点,数字=插入到的目标节点键(碎片插入仅文本子节点时,除碎片子节点后挑一级文本节点插入)
insType
插入时有效,true=插入头部,false(默认)=插入尾部,数字=插入指定节点键前,null=替换插入(移除目标子节点后插入)
//创建测试节点: <div><span></span></div>
$hParseObj = new of_base_com_hParse('<div><span></span></div>');
//获取节点键(节点数组)
$nodeKeys = $hParseObj->get();
//搜索span节点
$nodeKeys = of_base_com_hParse::selectors($nodeKeys, 'span');
//修改节点属性(单节点操作)
of_base_com_hParse::nodeAttr($nodeKeys[0], 'innerHTML', 'test');
//输出整个文档: <div><span>test</span></div>
echo $hParseObj->doc('str');
Clone this wiki locally