2017-10-13 68 views
-1

使用PHP,我该如何只替换段引用的blockquote元素的子元素?我需要暂时转换这些段落元素,而我运行一些其他功能,然后一旦这些功能完成运行,将它们更改回“p”“/ p”元素。 (即改变 “P”, “/ P” 到 “PTEMP” “/ PTEMP” 或类似的东西。)如何仅替换块引用元素的子段落?

这里是我的代码示例:

<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之前需要插入代码,所以不能使用js或jQuery。我需要忽略嵌套在块引用中的段落,以便代码不嵌入块引用中。

我的想法是更改blockquotes中的p元素,以便在第4段之后插入新代码时忽略它们。插入代码后,将它们更改回p元素。但肯定可能有更好的方法来忽略嵌套的p元素。

以下是其中要求,并通过Drupal的template.php文件中改变的标记代码:

<?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

你的问题很模糊所以其我很难得出一个结论,什么是你”重新确定后,但这个工程。

使用jQuery它改变了replace-this-element并将其转换为一个h1(我这样做是因为你指定你想改变这些元素PTEMP但PTEMP是不认可的HTML元素),然后交换回来。如果您运行该代码段,您将无法看到发生的任何事情,因为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>