我正在使用PHPDOM,并且试图在DOM节点中获取具有给定类名的元素。获得该子元素的最佳方法是什么?
更新: 我最终使用Mechanize
了PHP,它更容易使用。
更新:*[@class~='my-class']
CSS选择器的Xpath版本
因此,在下面我回应hakre的评论之后,我感到好奇,并调查了后面的代码Zend_Dom_Query
。看起来上面的选择器已编译为以下xpath(未经测试):
[contains(concat(' ', normalize-space(@class), ' '), ' my-class ')]
所以PHP将是:
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
基本上,我们在这里所做的就是规范化class
属性,以便即使单个类也受空格限制,而完整的类列表也受空格限制。然后在要搜索的类后面加上一个空格。这样,我们可以有效地查找并仅找到的实例my-class
。
使用xpath选择器?
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(@class, '$classname')]");
如果只是元素的一种类型,则可以将其替换*
为特定的标记名。
如果您需要使用非常复杂的选择器进行大量操作,我建议您Zend_Dom_Query
支持CSS选择器语法(类似于jQuery):
$finder = new Zend_Dom_Query($html);
$classname = 'my-class';
$nodes = $finder->query("*[class~=\"$classname\"]");
问题内容: 我想知道是否有一种功能或某种与之等效的方法。 问题答案: 您的函数名称中缺少。返回元素的集合,这些元素需要迭代: IE8及以下版本不支持,因此您必须找到一个polyfill或使用(IE8)。
问题内容: 使用JavaScript,我们可以使用以下语法通过id获取元素: 我尝试以下按类获取元素: 但这导致了错误: 如何按类获取元素? 问题答案: DOM函数的名称实际上不是,仅仅是因为页面上的多个元素可以具有同一类,因此:。 此方法的返回值将是NodeList实例,或者是(FF的超集,例如返回的实例)。无论如何:返回值是一个类似于数组的对象: 如果由于某种原因需要返回对象作为数组,则由于其
问题内容: 我知道我可以按元素获取范围: 我该如何反向:使用scope来查找DOM元素,例如? 我想这样做是为了调试。我的作用域树显示了一些内容,我想确定它的来源。 问题答案: 尽管不是很性感,但每个dom节点都有一个ng-scope类,因此您可以通过技术进行如下操作:
问题内容: 我正在尝试通过angularjs在html中查找元素。 这是html: 我试图通过类名多文件来获取按钮元素,然后我尝试 但是它不起作用,并且尝试过,但仅对标签起作用。 在angularjs中,有没有可以通过ID或类名获取元素的函数? 问题答案: 是DOM文档上的函数。它既不是jQuery也不是jqLite函数。 使用时不要在类名前添加句号: 将其包装在jqLite中(如果在An
嗨,我一直在到处寻找一个非常简单的解释,如何通过xPath找到一个元素。 我想要的只是一种简单的方法来寻找一个元素,但是我想要找到的所有帮助都需要一个。这对我不管用。以下是我想做的: 加载URL 这是我的代码: 当我执行 我得到未定义时,我做 有没有更简单的方法来获取元素?也许是。。。。
我是DOM查询的新手,我想知道是否可以通过Xpath直接查询DOM元素,类似于下面提到的代码? 谢谢