如何使用DOMDocument将元素插入到新元素中

时间:2012-11-20 20:48:23

标签: php domdocument

基本上我要做的是创建一个带有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 );

}

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

1 个答案:

答案 0 :(得分:1)

更改操作顺序:

  • 先替换
  • 追加第二

否则,您尝试将$wrap的{​​{1}}子元素替换为$copy_node,这没有任何意义。

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