Поиск текста, но игнорировать теги

268
07 апреля 2017, 23:03

есть поиск, если мы вводим одно слово - хорошо, вводим 2 слова, которые находяться в span или за его пределами тоже работает хорошо, но когда мы вводим словосочитание которое находить в span и за его пределами перестает работать, проблема в том что span class="wrapper" удалять нельзя он должен оставаться всегда. Пример не работает если мы введем also used

html:
<input type="text" id="searchField">
        <button id="btn">click</button>
        <div>
            <p>JavaScript is also<span class="wrapper"> used</span> in environments that are not Web-based, such as PDF documents, site-specific browsers, and desktop widgets. Newer and <span class="wrapper">faster</span> JavaScript virtual machines (VMs) and platforms built upon them have also increased the popularity of JavaScript </p>
        </div>

рабочий вариант:

$("#btn").click(function() {
        var input = $("#searchField").val();
        if (input !== "") {
            var search = $("#searchField").val().split(" ");
            var pattern = new RegExp(input, 'gi');
            $("div").each(function() {
                $(this).html($(this).html().replace(pattern, "<span class='text'>" + input + "</span>"));
            });
        }
    });

Второй вариант - идея чтобы искать по одному слову, но почему то не срабатывает

 $(function() {
        $("#btn").click(function() {
            var input = $("#searchField").val();
            if (input !== "") {
                var search = $("#searchField").val().split(" ");
                var pattern = new RegExp(search, 'gi');
                search.forEach(function (word) {
                    console.log(search);
                    $("div").html($("div").html().replace(pattern, "<span class='text'>" + search + "</span>"));
                });
            }
        });
    });

css:

.text {
                color: red;
            }
Answer 1

через regExp не получаеться это сделать, но нашел как это сделать другим методом

<input type="text" id="search">
        <input type="button" id="button" onmousedown="doSearch(document.getElementById('search').value)" value="Find">

js:

 function doSearch(text) {
   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, "blue");
       sel.collapseToEnd();
     }
     document.designMode = "off";
   } else if (document.body.createTextRange) {
     var textRange = document.body.createTextRange();
     while (textRange.findText(text)) {
       textRange.execCommand("BackColor", false, "blue");
       textRange.collapse(false);
     }
   }
 }
READ ALSO
Как сделать загрузку на кнопке asp.net mvc?

Как сделать загрузку на кнопке asp.net mvc?

Есть вот такая ajax форма для переписки:

259
Помогите с добавить значения в массив

Помогите с добавить значения в массив

Не получается добавить значение в массив, что делаю не так?

321
Баг с owl carousel 2 и history.back(); или обновлением страницы

Баг с owl carousel 2 и history.back(); или обновлением страницы

При обновлении страницы или переходом на неё через historyback(), содержимое прыгает в верх, а не остается на месте с сохранением истории, проблема...

266