【问题标题】:How can I insert text before and after a DOM Node in PHP?如何在 PHP 中的 DOM 节点前后插入文本?
【发布时间】:2017-04-14 05:48:29
【问题描述】:

我正在从一个 dom 对象创建一个 twig 文件,并且我想在特定 div 周围添加一个代码块,这样我就可以在 twig 中使用它。

所以我现在的html代码是这样的:

<div>
  <div class="class1 class2">
    <div>
      Some content here
    </div>
  </div>
</div>

我想改成(格式不重要):

<div>
  {% block topBar %}
    <div class="class1 class2">
      <div>
        Some content here
      </div>
    </div>
  {% endblock %}
</div>

所以我做了类似的事情:

$pullURL = "http://example.com";
$dom = new DOMDocument('1.0');
$dom->loadHTMLFile($pullURL);
$domx = new DOMXPath($dom);
$topBar = $domx->query("//*[contains(@class, 'class1 class2')]");
$startTopBlock = $dom->createTextNode("{% block topBar %}");
$topBar[0]->insertBefore($startTopBlock, $topBar[0]);

但是,我不断收到消息

PHP 致命错误:未捕获的异常 'DOMException' 带有消息 'Not 在 /path/to/file.php:41 中发现错误'

第 41 行是 insertBefore 代码。

在文本中包装 dom 对象的最佳方法是什么?

【问题讨论】:

    标签: php class dom nodes codeblocks


    【解决方案1】:

    问题是我需要将它插入到父级中,所以正确的代码应该是:

    $topBar[0]->parentNode->insertBefore($startTopBlock, $topBar[0]);
    

    而不是

    $topBar[0]->insertBefore($startTopBlock, $topBar[0]);
    

    因为我想将此代码插入到 $topBar[0] 之前的父级中。其他一切都是正确的。

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 2011-09-18
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      相关资源
      最近更新 更多