Мне нужно найти текст в html и выделить этот html без искажения самого html, который я выделяю.
Текст для замены:
Это текст 2. Это текст 3.
HTML:
This is text 1. <p> This is <span>Text 2</span>. This <div>is</div> text 3. </p> This is Text 4.
Желаемый результат:
This is text 1.<p> <strong class="highlight">This is <span>Text 2</span>. This <div>is</div> text 3. </strong> </p> This is Text 4.
EDIT : Извините, если я не смог объяснить правильно.
Мне нужно выделить часть html-документа (в php или javascript), если строка, которую я ищу, соответствует тексту в HTML.
Но помните, что строка, которую я ищу, не идентична строке поиска, она может содержать некоторый дополнительный HTML.
Например, если я ищу эту строку « Это текст », ее следует сопоставить с «This is text.», «<Anyhtmltag> This </ anyhtmltag> – это текст.», «Этот <anyhtmltag> есть </ anyhtmltag> text. "," Этот <anyhtmltag> – это текст </ anyhtmltag>. " и так далее.
Вы должны быть более конкретными, если вы хотите достичь этого с помощью серверной части (например, с помощью PHP и возврата в браузер кода HTML, который уже содержит выделенный вывод) или на стороне клиента (например, с помощью jQuery, чтобы найти и выделить что-то в HTML, возвращаемом сервером)?
Мне кажется, что вы просто задали вопрос, не делая ничего (например, поиск в сети), так как поиск правильного решения для jQuery (на стороне клиента) занял меня около десяти секунд! И три наиболее важных результата поиска были на самой документации StackExchange и jQuery.
Найти текст с помощью jQuery?
Найти текстовую строку с помощью jQuery?
Описание функции jQuery .wrap ()
Вот пример в очень кратком:
<script> $('div:contains("This is <span>Text 2</span>. This <div>is</div> text 3")')wrap("<strong class="highlight"></strong>"); </script>
Он обычно находит, что вы хотите найти и обернуть его тем, что вы хотите, чтобы оно было обернуто.
Это работает, когда текст, который вы хотите найти, находится внутри некоторого div, поэтому я использовал $('div:contains
. Если вы хотите искать целую страницу, вы можете использовать $('*:contains
вместо этого $('*:contains
.
Это пример для выделения jQuery и на стороне клиента. Для версии PHP (на стороне сервера) выполните небольшой поиск в Google или StackOverflow, и вы наверняка найдете много примеров.
EDIT : Что касается вашего обновленного вопроса. Если вы используете текстовое поле для размещения там, что вы хотите найти, вы можете, конечно, использовать что-то вроде этого:
<script> $("#mysearchbox").change( { $('div:contains($("#mysearchbox")').wrap("<strong class="highlight"></strong>"); }); </script>
и определите окно поиска в другом месте, например, например:
<input id="mysearchbox"></input>
Таким образом, вы присоединяете событие onChange
к своему окну поиска, которое будет onChange
в любое время, когда вы напечатаете что-либо для него, и которое должно найти (и выделить) все, что вы ввели. Обратите внимание, что эти примеры взяты из рук (из памяти). У меня нет доступа к jQuery, откуда я пишу, поэтому я не могу проверить, нет ли ошибок, в том, что я только что написал. Тебе нужно проверить это самостоятельно.
С помощью JQuery вы можете добавлять классы к таким элементам …
HTML:
<p id='myParagraph'>I need highlighting!</p>
JQuery:
$(document).ready(function(){ $('#myParagraph').addClass('highlight'); });
Я бы посмотрел, где вы можете разместить определенные HTML-элементы, так как не рекомендуется размещать такие вещи, как теги div в тегах p.
Надеюсь, это поможет!
ОБНОВЛЕНО
Хорошо, вы можете использовать JQuery для переноса тегов вокруг вашего кода.
Если вам нужно удалить теги, вы можете использовать функцию ленточных меток PHP – это может помочь в сравнении текстовой строки без форматирования HTML – очевидно, будет сделано до того, как страница загрузится в браузере. Не уверен в эквиваленте Javascript.
Обертка позволит вам перейти с вашего HTML на ваш желаемый результат. Тем не менее, я бы серьезно подумал о структуре вашего HTML, чтобы убедиться, что это лучшее, что может быть … может облегчить жизнь.