【问题标题】:Simple HTML DOM - Child Selectors (CSS)简单的 HTML DOM - 子选择器 (CSS)
【发布时间】:2015-11-05 18:53:17
【问题描述】:

我正在尝试使用 > 组合子选择父母 div.element 的(直接)孩子,但它失败了。

HTML:

<div class="element">
    <p>test</p>
</div>

<div class="element">
    <div class="selected">
        <p>test2</p>
    </div>
</div>

PHP:

$html->find('div.element > p', 0);

我希望选择直接的p 元素。

如果它是一个嵌套的后代 - 它不应该返回任何东西,但它会返回 test2

我如何写它来返回test,而不是test2?谢谢

更新:这里关于 SO 的普遍共识似乎是简单的 HTML DOM 是不好的。我最终按照 Phil 的建议使用 PHP 的 DOMDocument 编写了我的代码。我确实测试了 nevermind 的解决方案,它也确实有效。感谢所有帮助和快乐编码

【问题讨论】:

  • test2 以任一方式返回。 &gt; 似乎什么都不做
  • 试试这个:$html->find(div.element > p);
  • SimpleHTMLDom 是一个非常糟糕的库,我怀疑它是否支持直接子选择器。请参阅此页面以获取更好替代方案的列表 ~ stackoverflow.com/questions/3577641/…
  • @khuderm 你可以使用其他东西来完成这个任务(我推荐内置的 Dom 扩展)。这并不意味着您需要删除 SimpleHTMLDom 或重构任何其他代码
  • 对于具有完整 css 支持的简单 html dom 替换 try this。是的,简单的 html dom 很糟糕,但它也是一个非常古老的库,有一段时间它就是我们所拥有的。

标签: php css simple-html-dom


【解决方案1】:

嗯,这应该(必须,实际上:))工作(在 4 个 div 上测试):

foreach($html->find('div.element') as $element) {


$paragraph=$element->find('p',0);

    if($paragraph==$element->first_child())
    echo $paragraph;

}

【讨论】:

  • 在找到解决方案后,我确实测试了您的代码。不知道为什么你首先删除了你的答案哈哈。我最终按照@Phil 的建议做了。如果他不写答案,我会选择你的作为解决方案,因为它也有效。谢谢
  • Np,第一个解决方案不适用于两个

    相邻标签(如果在您的 HTML 结构中可能) - 如果您只想先... :)

  • 这对我来说是可行的。只有跨度的第一个元素有时存在,有时不存在。如果它在那里,我只需要它里面的值。如果不是,我想要第二个元素的值。无论如何,非常感谢您的帮助!
猜你喜欢
  • 2014-05-23
  • 1970-01-01
  • 2023-01-03
  • 2015-03-14
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多