2017-10-13 4 views
-1

PHPを使用すると、blockquote要素の子である段落のみをどのように置き換えることができますか?私はこれらの段落要素を一時的に変換する必要があります。他の関数を実行してから、それらの関数が実行終了すると、 "p" "/ p"要素に戻します。 (。。すなわち、 "P" PTEMP " "/ PTEMP" またはそのような何か "を""/Pを変更)blockquote要素の子である段落だけを置き換えるにはどうすればよいですか?

ここに私のコードのサンプルです:

<blockquote> 
    <div> 
    <p class="replace-this-element">Some Text</p> 
    </div> 
</blockquote> 

<p class="do-not-replace-this-element">Some Text</p> 

<p class="do-not-replace-this-element">Some Text</p> 

<blockquote> 
    <div> 
    <p class="replace-this-element">Some Text</p> 
    </div> 
</blockquote> 

<p class="do-not-replace-this-element">Some Text</p> 

<p class="do-not-replace-this-element">Some Text</p> 

<blockquote> 
    <div> 
    <p class="replace-this-element">Some Text</p> 
    </div> 
</blockquote> 

編集:ご質問をお寄せいただきありがとうございます、ここにいくつかの情報があります。 。 。 PHPを使用してDrupalノードのコンテンツフィールドのレンダリングされたマークアップを変更していますので、サーバーサイドで発生しています。私は、DOMがクライアントのブラウザに組み込まれる前に挿入する必要がある4番目の段落の後にコードを挿入しているので、jsまたはjQueryを使用することはできません。ブロッククォートにネストされた段落を無視して、コードがブロッククォート内に埋め込まれないようにする必要があります。

第4段落の後に新しいコードを挿入するときに無視されるように、ブロック引用内のp要素を変更することを考えました。コードを挿入したら、p要素に戻します。しかし、確実に入れ子になったp要素を無視するより良い方法があるかもしれません。 「私は、それはあなたが何であるかに結論に来るのをあなたの質問はとてもそのハード非常にあいまいである

<?php 
function mytheme_preprocess_node(&$variables) { 
    $codeToInsert = '<div>A bunch of stuff to add after the 4th paragraph.</div>'; 
    $contentToAlter = $variables['content']['body'][0]['#markup']; 
    $contentToAlter = explode("<p>", $contentToAlter); 
    $contentToAlter[3] .= $codeToInsert ; 
    $contentToAlter = implode($contentToAlter, "<p>"); 
    $variables['content']['body'][0]['#markup'] = $contentToAlter; 
} 
+0

私はあなたが実行時にあなたの要素を交換するためにPHPをしたい正しく理解していた場合。 PHPはサーバー側ですが、代わりにJQuery/Javascriptを使用することをお勧めします – Jesus

+0

このHTMLコードをPHPコードに付けて修正したいのですか、それともブラウザで変更したいですか? –

答えて

0

:後

はdrupalのtemplate.phpファイルを経由してマークアップを呼び出して、変更したコードですちょうど後で、これは動作します。 jQueryのを使用して

それはreplace-this-elementを変更し、h1に変換(あなたはPTEMPし、これらの要素を変更するようだったが、HTMLで認識要素がPTEMPないことを指定したので、私はこれをしなかった)、その後、それをバック交換します。スニペットを実行すると、othermethod()の内部に何も入っていないため、何も起こりません。

replace_elements(); 
 
other_method(); 
 
replace_elements_back(); 
 

 
function replace_elements() { 
 
    $("blockquote div").html('<h1 class="replace-this-element">Some Text </h1>'); 
 
} 
 

 
function other_method() { 
 

 
} 
 

 
function replace_elements_back() { 
 
    $("blockquote div").html('<p class="replace-this-element">Some Text </p>'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<blockquote> 
 
    <div> 
 
    <p class="replace-this-element">Some Text</p> 
 
    </div> 
 
</blockquote> 
 

 
<p class="do-not-replace-this-element">Some Text</p> 
 

 
<blockquote> 
 
    <div> 
 
    <p class="replace-this-element">Some Text</p> 
 
    </div> 
 
</blockquote>

関連する問題