Как выделить все текстовые вхождения на HTML-странице с помощью JavaScript?
Я действительно думал, что это ответят много лет назад, но я не нашел никакого решения:
Я хочу выделить (т.е. сделать цветной фон) все вхождения (под) строки на всю HTML-страницу, полностью на стороне клиента с JavaScript.
Так же, как вы использовали бы Ctrl + F для поиска в Google Chrome: при вводе условия поиска выделяются все подстроки, соответствующие моему введенному термину.
Лично я бы прошел все элементы дерева DOM, выполнив replace
поискового термина с чем-то вроде
<span style="background-color: yellow">MySearchTerm</span>
Но я думаю, что должен быть более эффективный способ?
Мой вопрос:
Как использовать JavaScript (или jQuery), чтобы выделить все подстроки в HTML-странице?
Ответы
Ответ 1
Замена содержимого с помощью <span>
также является опцией. Есть еще один вариант, который вы можете попробовать, который является JQuery-плагинами. Здесь является одним из них.
Вы можете использовать его так:
$('body').text().highlight('my text to highlight');
Ответ 2
Я изо всех сил пытался найти надежный текстовый маркер, который дублирует функции браузера ctrl + f в течение нескольких месяцев. Я использовал множество плагинов jQuery. Некоторые из них лучше других, но ни один из них не способен охватывать HTML. Скажем, вы хотите найти текст, который включает ссылку - браузер может это сделать, но никакие плагины jQuery, которые я нашел, могут.
Оказывается, голый голый javascript имеет ответ. Просто window.find()
.
find(string, matchcase, searchBackward)
string: текстовая строка для поиска.
matchcase: логическое значение. Если true, задается поиск с учетом регистра. Если вы укажете этот параметр, вы также должны поставить назад.
searchBackward: Boolean. Если true, задается обратный поиск. Если вы укажете этот параметр, вы также должны указать чувствительность к регистру.
Он выделяет html загруженные строки и совместим с каждым браузером, о котором вы заботитесь. Узнайте больше об этом на http://www.w3resource.com/javascript/client-object-property-method/window-find.php
К сожалению, вы не можете ничего с этим поделать. Я не могу обернуть его в стиле тегов span, получить позицию, прокрутить к ней или изменить цвет подсветки. Я все еще ищу идеальную функцию JS ctrl + f.
Ответ 3
Если вы пытаетесь выделить условия поиска из google, вы можете использовать этот плагин jquery, доступный по адресу https://github.com/hail2u/jquery.highlight-search-terms
Если вам нужна функциональность, например, хром. вы можете использовать этот код.
$(document).ready(function(){
var search = ['p', 'div', 'span'];
$("#highlighter").bind('keyup', function(e){
var pattern = $(this).val();
$.each(search, function(i){
var str = search[i];
var orgText = $(str).text();
orgText = orgText.replace(pattern, function($1){
return "<span style='background-color: red;'>" + $1 + "</span>"
});
$(str).html(orgText);
});
});
});
Ответ 4
Самый лучший вариант для этого, как правило, несколько удивительно, чтобы не делать этого.
Полагайтесь на встроенную функцию поиска веб-браузера: это гарантирует, что пользователи будут иметь последовательный опыт и избавит вас от многих проблем, связанных с удвоением работы, которая уже была выполнена для этого.
Ответ 5
Window.find() должен выполнить задание.
Хотя он еще не стандартизирован, почти все основные браузеры с более новой версией поддерживают его, такие как Google Chrome, Firefox, IE, Safari, Opera и браузеры на планшетах и телефонах iPhone/Android/Amazon Fire и т.д.
Ниже приведен пример реализации:
/*
* Search for text in the window ignoring tags
*
* Parameters:
* text: a string to search for
* backgroundColor:
* "yellow" for example, when you would like to highlight the words
* "transparent", when you would like to clear the highlights
* */
function doSearch(text, backgroundColor) {
if (window.find && window.getSelection) {
document.designMode = "on";
var sel = window.getSelection();
sel.collapse(document.body, 0);
while (window.find(text)) {
document.execCommand("HiliteColor", false, backgroundColor);
sel.collapseToEnd();
}
document.designMode = "off";
}
}
Код из программы Tim Down 'с использованием Window.find()
Перед поиском текст HTML выглядит так:
<p>Here is some searchable text with some lápices in it, and some
<b>for<i>mat</i>t</b>ing bits, and a URL
<a href="#" onclick="location.href='https://www.google.com'; return false;">Google Search Engine</a> as a link.
</p>
После поиска текста, например, some lápices in it, and some formatting bits, and a URL Google
, текст HTML изменится на:
<p>Here is some searchable text with <span style="background-color: yellow;">some lápices in it, and some
<b>for<i>mat</i>t</b>ing bits, and a URL
</span><a href="#" onclick="location.href='https://www.google.com'; return false;"><span style="background-color: yellow;">Google </span>Search Engine</a> as a link.
</p>
Смотрите код jsfiddle.