0

基本的に私がやろうとしているのは、css クラスで div を作成し、その中にいくつかの要素を入れてから、同じ HTML を新しい div に置き換えることです。私はさまざまな方法を試しましたが、失敗した最新の方法を次に示します。

$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 );

}

ドキュメント内のいくつかの要素を新しい要素に置き換えることができるように、新しく作成された要素にいくつかの要素を挿入する方法を誰かが説明できますか?

4

1 に答える 1

1

操作の順序を変更します。

  • 最初に交換
  • 2 番目に追加

$wrapそうしないと、の$copy_node子要素をに置き換えようとしています$wrapが、意味がありません。

最初に置換を行うことで、ラップされる要素があった場所にラップ要素が挿入されます。これにより、ラップされる要素の部分がドキュメントに残りますが、ツリーには残りません。ツリーに配置するには、ラッピング要素に追加するだけです。

于 2012-11-20T21:06:28.330 に答える