toLowerCase не правильно работает в поиске

Даже не знаю как описать свою проблему , постараюсь максимально подробно. Мне нужно было сделать , чтобы поиск не обращал внимание на размер буквы при поиске слов , я добавил toLowerCase , но всё работает вообще не так как должно. Например ,ввожу "п" или "П" видно только слово с маленькой буквы , ввожу "в" или "В" , вроде правильно показывает все слова и с большой и с маленькой буквы, начинаю вводить "вт" всё , видно только слово с маленькой буквы, на английском ввожу "anana" всё правильно работает , показывает и с маленькой и с большой , как мне и нужно , а слово "BOM" вообще не видит , не с маленькой , не с большой и не пойму как это исправить

const $search = document.getElementById("search");
const preElements = document.querySelectorAll("pre");


const initialContents = {};
preElements.forEach(function(pre) {
  initialContents[pre.id] = pre.textContent;
});


function filterPreElements(searchText) {
  preElements.forEach(function(pre) {
    const lines = initialContents[pre.id].split("\n");
    const filteredLines = lines.filter(function(line) {
      return line.includes(searchText.toLowerCase());
    });
    pre.textContent = filteredLines.join("\n");
  });
}

$search.addEventListener("input", function(e) {
  const searchText = e.target.value.trim();
  filterPreElements(searchText);
});
<input id="search" type="text" placeholder="Type to filter" />

<pre id="pre-1">
первое слово
Первое слово
Второе слово 
второе слова
</pre>


<pre id="pre-2">
Ananana
ananana
albert
BOM
</pre>


Ответы (1 шт):

Автор решения: Vladyslav

Проблема, описанная Вами, связана с тем, что вы приводите текст к нижнему регистру только при сравнении со строкой searchText, но оставляете исходный текст в pre без изменений. Это приводит к тому, что поиск осуществляется только с учетом регистра в searchText, но отображение остается неизменным.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>For – Stanislav Volodarskiy </title>
</head>

<body>
    <input id="search" type="text" placeholder="Type to filter" />

    <pre id="pre-1">
        первое слово
        Первое слово
        Второе слово 
        второе слова
    </pre>

    <pre id="pre-2">
        Ananana
        ananana
        albert
        BOM
    </pre>

    <script>
        const $search = document.getElementById("search");
        const preElements = document.querySelectorAll("pre");

        const initialContents = {};
        preElements.forEach(function (pre) {
            initialContents[pre.id] = pre.textContent;
        });

        function filterPreElements(searchText) {
            preElements.forEach(function (pre) {
                const lines = initialContents[pre.id].split("\n");
                const filteredLines = lines.filter(function (line) {
                    return line.toLowerCase().includes(searchText.toLowerCase());
                });
                pre.textContent = filteredLines.join("\n");
            });
        }

        $search.addEventListener("input", function (e) {
            const searchText = e.target.value.trim();
            filterPreElements(searchText);
        });
    </script>
</body>

</html>

Вывод результатов поиска

→ Ссылка