如何在PHP QueryPath中实现jQuery的outerHTML功能?
在QueryPath中实现outerHTML功能(获取根元素完整HTML)
要在QueryPath中实现类似JS里jQuery("html")[0].outerHTML的功能(获取根元素的完整HTML,包括自身标签),可以利用QueryPath底层依赖的PHP DOM扩展来实现,具体方案如下:
可行方案
场景1:直接获取整个HTML文档的根元素outerHTML
$qp = qp($html); // 获取根元素对应的DOMElement对象 $rootElement = $qp->top()->get(0); // 利用DOMDocument的saveHTML方法输出完整outerHTML echo $rootElement->ownerDocument->saveHTML($rootElement);
场景2:从指定子元素出发获取根元素的outerHTML
如果是从某个筛选后的子元素向上查找根元素,代码如下:
$qp = qp($html, $filter); // 找到根元素并获取对应的DOMElement对象 $rootElement = $qp->parents(':root')->get(0); // 输出完整outerHTML echo $rootElement->ownerDocument->saveHTML($rootElement);
为什么你之前的尝试无效?
(string) qp(...):QueryPath对象强制转换为字符串时,默认只返回元素的内部HTML,不包含自身标签。->html():该方法的设计就是返回元素的innerHTML,不会包含元素自身的起始和结束标签。->prop('outerHTML'):QueryPath没有提供prop方法来访问DOM的outerHTML属性,它的prop方法仅用于操作元素的普通属性(如class、src等)。->outerHTML:QueryPath对象本身没有这个属性,因此会返回空字符串。
原理说明
QueryPath基于PHP的DOM扩展实现,而DOMDocument的saveHTML方法在传入特定DOMElement对象时,会输出该元素的完整HTML内容(包括自身标签),这正好对应JS中outerHTML的功能。
内容的提问来源于stack exchange,提问作者Luc Laverdure
相关产品推荐
相关产品推荐

