Используя 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>
Изменить: Спасибо за ваши вопросы, вот еще немного информации. , , Я изменяю визуализированную разметку для поля содержимого узла drupal, используя PHP, чтобы это происходило на стороне сервера. Я вставляю код после 4-го абзаца, который нужно вставить до того, как DOM будет встроен в браузер клиента, поэтому я не могу использовать js или jQuery для этого. Мне нужно игнорировать абзацы, вложенные в кавычки, чтобы код не был встроен в кавычки.
Моя мысль состояла в том, чтобы изменить элементы 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;
}
Ваш вопрос очень расплывчатый, поэтому мне сложно прийти к выводу, что именно вы ищете, но это работает.
Используя 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>
Других решений пока нет …