如何仅替换blockquote元素的子段落?

时间:2017-10-13 17:24:17

标签: php elements paragraph

使用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节点的content字段的呈现标记,因此它发生在服务器端。我在第4段之后插入代码,需要在客户端浏览器中构建DOM之前插入代码,因此不能使用js或jQuery。我需要忽略嵌套在blockquotes中的段落,这样代码就不会嵌入到blockquotes中。

我的想法是更改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;
}

1 个答案:

答案 0 :(得分:0)

你的问题很模糊,所以很难让我得出结论你的确是什么,但是这很有效。

使用JQuery更改replace-this-element并将其转换为h1(我这样做是因为您指定要将这些元素更改为ptemp但ptemp不是html识别的元素)并且然后把它换回来。如果您运行代码段,则无法看到任何内容,因为othermethod()内部没有任何内容。

&#13;
&#13;
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>');
}
&#13;
<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>
&#13;
&#13;
&#13;