3

ここで髪を引っ張る...

PHP を使用して、2 つの異なるポイントで一連の html を別の一連の html に挿入する必要があります。

$a は別のクラスの関数から返されます。$b を $a に挿入して、$b 要素を $a の要素の一部の親にする必要があります。

<?php
$a = '
<div id="one">
    <div id="two">
        <div id="three">Hi</div>
    </div>
</div> 
';

$b = '
<div id="red">
    <div id="blue"></div>
</div>
<div id="green">
    <div id="yellow">there</div>
</div>
';
?>

終了する必要があります:

<?php
$c = '
<div id="one">
    <div id="two">
        <div id="red">
            <div id="blue">
                <div id="three">Hi</div>
            </div>
        </div>
        <div id="green">
            <div id="yellow">there</div>
        </div>
    </div>
</div>
';
?>

$b が $a に挿入され、$ba のすべての子が「2」になることに注意してください。しかし同時に「三」は「青」の子となる。"green" と "yellow" は元の関係を維持していますが、現在は "two" の下にネストされています。

実世界の例....

<?php
$a = '
<div class="ginput_complex ginput_container">
    <span class="ginput_full">
            <input name="input_5" id="input_4_5" type="file" value="" class="medium" tabindex="5">
            <label for="input_4_5" class="ginput_post_image_file">File</label>
    </span>
    <span class="ginput_full ginput_post_image_title">
            <input type="text" name="input_5.1" id="input_4_5_1" value="" tabindex="6">
            <label for="input_4_5_1">Title</label>
    </span>
    <span class="ginput_full ginput_post_image_caption">
            <input type="text" name="input_5.4" id="input_4_5_4" value="" tabindex="7">
            <label for="input_4_5_4">Caption</label>
    </span>
    <span class="ginput_full ginput_post_image_description">
            <input type="text" name="input_5.7" id="input_4_5_7" value="" tabindex="8">
            <label for="input_4_5_7">Description</label>
    </span>
</div>
';


$b =
'
<div class="container">
    <div class="row fileupload-buttonbar">
        <div class="span7">
            <span class="btn btn-success fileinput-button">
            <i class="icon-plus icon-white"></i>

            {{{{{{{{ THIS IS WHERE I MY FILE INPUT SHOULD GO }}}}}}}}}}}

            </span>
            <button type="submit" class="btn btn-primary start">
                <i class="icon-upload icon-white"></i>
                <span>Start upload</span>
            </button>
            <button type="reset" class="btn btn-warning cancel">
                <i class="icon-ban-circle icon-white"></i>
                <span>Cancel upload</span>
            </button>
            <button type="button" class="btn btn-danger delete">
                <i class="icon-trash icon-white"></i>
                <span>Delete</span>
            </button>
        </div>
    </div>
</div>
';

$doc = new DOMDocument;
$doc->loadHTML($a);
$x = new DOMXPath($doc);

?>

$x->query('//*[@id="input_4_5"]') を使用して、作業を開始したいノードに到達します。そこから、新しい DOMElement と importNode を、appendChild、replaceChild、insertBefore のバリエーションと共に使用して、DOM ツリーをたどってみました。しかし、率直に言って、たとえトラバースに成功したとしても、作業中の大きなコード ブロックを挿入/追加する方法がわかりません。

4

5 に答える 5

5

SimpleHTMLDomパーサーを使用しています

これを試して:

<?php
require_once( 'simple_html_dom.php' );

$a = '
<div id="one">
    <div id="two">
        <div id="three">Hi</div>
    </div>
</div> 
';

$b = '
<div id="red">
    <div id="blue"></div>
</div>
<div id="green">
    <div id="yellow">there</div>
</div>
';

$a = str_get_html( $a );
$c = str_get_html( $b );

$c->find( 'div[id=blue]', 0 )->innertext = $a->find( 'div[id=two]', 0 )->innertext;
$a->find( 'div[id=two]', 0 )->innertext = $c->save();

echo $a;
?>

お役に立てれば。

于 2012-09-17T06:25:41.907 に答える
2

以下のコードを確認してください。出力の生成にphpとjQueryを使用しました。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script language="javascript" src="http://code.jquery.com/jquery-1.7.js"></script>
</head>

<body>
<div id="varA" style="display:none">
<?
    echo $a= '<div id="one">
    <div id="two">
        <div id="three">Hi</div>
    </div>
</div>';
?>
</div>
<div id="varB" style="display:none">
<?
    echo $b = '
<div id="red">
    <div id="blue"></div>
</div>
<div id="green">
    <div id="yellow">there</div>
</div>
';
?>
</div>

<span id="output"></span>

<script language="javascript">
alert('varA id have:'+$('#varA').html());
var middle = $('#two').html();
$('#output').html($('#varA').html());
$('#varA').remove();
alert('varB id have:'+$('#varB').html());
$('#two').html($('#varB').html());
$('#varB').remove();
$('#blue').html(middle);
alert('output id have:'+$('#output').html());
</script>

</body>
</html>
于 2012-09-17T06:26:19.003 に答える
0

aとに関するデータを取得するための新しい関数をb作成してから、htmlを生成する方がよいと思います。

于 2012-09-17T06:10:16.717 に答える
0

私がそれをしなければならなかった場合、私はプレースホルダー、何かの行/#/を作成してから、それに ma str_replace を実行します。

しかし、本当に DOM を使用する必要がある場合は、DOMDocument を確認してください。

Javascript を実行したい場合は、js でそれらをエコーアウトします

<script>

var a = '<?php echo $a ?>';
var b = '<?php echo $b ?>':

</script>
于 2012-09-17T06:24:09.210 に答える
-1

文字列を置き換えることは役に立ちますか?

$matched = array();
preg_match('/<div id="three">.*?<\/div>/', $a, $matched);
$b = preg_replace('/<div id="blue"><\/div>/', '<div id="blue">'.$matched[0].'</div>', $b);
$a = str_replace($matched[0], $b, $a);
于 2012-09-17T06:09:16.230 に答える