【问题标题】:How to insert elements into new element with DOMDocument如何使用 DOMDocument 将元素插入新元素
【发布时间】:2012-11-09 00:44:13
【问题描述】:

基本上我想要做的是创建一个带有 css 类的 div,在其中放入一些元素,然后用我的新 div 替换相同的 HTML。我尝试了许多不同的方法,但这是最近的一种,但失败了。

$dom = new DOMDocument( '1.0', strtolower( get_bloginfo( 'charset' ) ) );
@$dom->loadHTML( '<div>' . $content . '</div>' );
$dom->formatOutput = true;

foreach( $dom->getElementsByTagName( 'img' ) as $image ) {
    $copy_node = null;

    if( $image->parentNode->tagName == 'a' )
        $copy_node = $image->parentNode;

    if( !is_null( $copy_node ) && $copy_node->parentNode->tagName == 'p' )
        $copy_node = $copy_node->parentNode;

    if( is_null( $copy_node ) )
        $copy_node = $image;

    $wrap = $dom->createElement( 'div' );
    $wrap->setAttribute( 'class', 'some-css-class' );

    // Insert $copy_node into it - doesn't work
    $wrap->appendChild( $copy_node );

    // Replace the node with the new one
    $copy_node->parentNode->replaceChild( $wrap, $copy_node );

}

有人能解释一下如何在新创建的元素中插入一些元素,以便我可以在文档中用我的新元素替换一些元素吗?

【问题讨论】:

  • 其余代码在哪里? $copy_node 来自哪里?
  • $copy_node 是在哪里定义的?看起来你正试图在树中创建一个循环,这是被禁止的。
  • 更新了我的代码以显示更多正在发生的事情

标签: php domdocument


【解决方案1】:

改变操作顺序:

  • 先更换
  • 追加第二个

否则,您试图用$wrap 替换$wrap$copy_node 子元素,这是没有意义的。

通过首先进行替换,将包装元素插入到要包装的元素所在的位置。这将保留文档的待包装元素部分,但不再保留在树中。要在树中给它一个位置,只需将其附加到包装元素即可。

【讨论】:

  • 简单但起初并不明显。乐意效劳。 :)
猜你喜欢
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多