Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 15.11.2014
Сообщений: 6
1

Код JQuery на чистый JavaScript

22.08.2018, 18:20. Показов 1500. Ответов 2

Author24 — интернет-сервис помощи студентам
Здравстуйте. Столкнулся с проблемой начинающего Веб-программиста. Нашел рабочий скрипт написанный на JQuery высветляющий значение "No Results" при введении в input несуществующего значения в таблице("Живой поиск"). Пробовал переписать самостоятельно, читать документацию, но безуспешно. Помогите переписать его на чистый JS.
Код в JQuery:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    $(".search").keyup(function () {
    var search = $(this).val();
    $(".list").children().show();
    $('#noresults').remove();
    if (search) {
        $(".list").children().not(":containsNoCase(" + search + ")").hide();
        $(".list").each(function () {
            if ($(this).children(':visible').length == 0) 
              $(this).append('<tr class="noresults"><td style="text-align:center; font-size:17px; padding:25px 0 25px 0!important">No Results</td></tr>');
        });
 
    }
});
 
$.expr[":"].containsNoCase = function (el, i, m) {
    var search = m[3];
    if (!search) return false;
    return new RegExp(search, "i").test($(el).text());
};
Добавлено через 17 минут
Неудачная попытка на чистом JS:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
document.getElementByClassName('search').onkeyup = function() {
      var search = this.value;
      document.getElementByClassName('list').children().show();
      document.getElementById('noresults').remove();
      if(search) {
        document.getElementByClassName('list').children().not(":containsNoCase(" + search + ")").hide();
        document.getElementByClassName('list').each = function () {
          if(this.children(':visible').length == 0)
            this.append('<tr class="noresults"><td style="text-align:center; font-size:17px; padding:25px 0 25px 0!important">No Results</td></tr>');      
        }
      }
    };
 
expr[":"].containsNoCase = function (el, i, m) {
    var search = m[3];
    if (!search) return false;
    return new RegExp(search, "i").test($(el).text());
};
Особенно не могу найти альтернативу на JS для второй функции:
Javascript
1
2
3
4
5
expr[":"].containsNoCase = function (el, i, m) {
    var search = m[3];
    if (!search) return false;
    return new RegExp(search, "i").test($(el).text());
};
Добавлено через 8 минут
Сам скрипт, собственно, взят отсюда:
http://jsfiddle.net/bk13detv/26/
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2018, 18:20
Ответы с готовыми решениями:

Перевод из jQuery в чистый JS
появилась проблема в написании на чистом JS вот такой штуки: &lt;script type=&quot;text/javascript&quot;&gt;...

Jquery работает,чистый Js-нет
Вот такой код, css-фреймворк Bootstrap. Event &quot;show.bs.modal&quot; с Jquery кодом отрабатывает,а то же...

Фреймворк или чистый JavaScript?
Всем привет! Хочется узнать мнение общественности по поводу использования разнообразных...

Как используя чистый JavaScript присвоить элементу нужный ID
Здравствуйте друзья! Столкнулся с проблемой, что не знаю, как элементу присвоить id. Классы...

2
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,987
Записей в блоге: 43
23.08.2018, 00:54 2
Лучший ответ Сообщение было отмечено magistrat4797 как решение

Решение

magistrat4797, решение "в лоб" будет выглядеть примерно так
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        document.getElementById("my-search-input")
            .addEventListener("keyup", function (evt)
            {
                let mylist = document.querySelectorAll(".my-list");
                for (let tbody of mylist)
                {
                    let noresults = true;
                    let noresultsrow = tbody.querySelectorAll(".noresults");
                    if (noresultsrow.length > 0)
                        for (let row of noresultsrow)
                            row.parentElement.removeChild(row);
                    for (let row of tbody.querySelectorAll("tr"))
                    {
                        let includes =
                            row.textContent
                                .toLowerCase()
                                .search(evt.target.value.toLowerCase()) > -1;
                        if (includes) noresults = false;
                        row.style.display = includes ? "" : "none";
                    }
                    if (noresults)
                    {
                        tbody.innerHTML += "<tr class='noresults'><td colspan='3'><em>No Results</em></td></tr>";
                    }
                }
            });
Цитата Сообщение от magistrat4797 Посмотреть сообщение
Особенно не могу найти альтернативу на JS для второй функции:
Эта функция добавляет новый селектор в жквери и актуальна только если использовать этот фреймворк. Так что ее никак не перепишешь, там просто в основном коде вместо использования этого нового селектора надо выполнять работу, описанную в этой функции.
1
dev - investigator
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
23.08.2018, 09:54 3
diadiavova, приветствую
magistrat4797, еще вариант - https://codepen.io/qwerty_wasd/pen/wEaWNP
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
let searchInput = document.getElementById('my-search-input'),
    posCell = document.querySelectorAll('.my-list td'),
    envTableBody = document.getElementsByClassName('my-list');
 
//сразу добавим таблицам футер, чтобы потом просто показывать по условию
Array.from(envTableBody,e => e.insertAdjacentHTML("beforeBegin",`<tfoot class='footer-result' style='display:none'><tr><td colspan="3"><em>No Results</em></td></tr><tfoot>`));
 
const searchPatt = () => {
 
  //для каждой ячейки сделаем отдельно проверку на пробелы
  posCell.forEach(e => e.parentElement.style = (searchInput.value.trim()=='') ? 'display:table-row' : 'display:none');
 
  //далее отфильтруем по паттерну и покажем строки прошедших по нему
  [...posCell].filter(e => e.textContent.trim().match(new RegExp(`^${searchInput.value}`,'i'))).forEach(e => e.parentElement.style = 'display:table-row');
 
  // и сравнивая  tbody по детям с display:none с общим их кол-вом, покажем футер в случае совпадения
  Array.from(envTableBody, (e,i)=>{
    document.getElementsByClassName('footer-result')[i].style = ([...e.children].filter(el => el.style.display == 'none').length === e.children.length) ? 'display:table-footer-group' : 'display:none';
  });
}
 
searchInput.addEventListener('input',searchPatt);
//далее, если понадобится, можно удалить обработчик.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<section>
  <input id="my-search-input" type="text" placeholder="Search list"/>
  <div class="something">
    <table>
      <thead>
        <tr>
          <th>Name</th>
          <th>2nd column</th>
          <th>3rd column</th>
        </tr>
      </thead>
      <tbody class="my-list">
        <tr>
          <td>Lorem ipsum</td>
          <td>123</td>
          <td>Right</td>
        </tr>
        <tr>
          <td>Dolor sit</td>
          <td>100</td>
          <td>Wrong</td>
        </tr>
      </tbody>
    </table>
  </div>
  <div class="something">
    <table>
      <thead>
        <tr>
          <th>Name</th>
          <th>2nd column</th>
          <th>3rd column</th>
        </tr>
      </thead>
      <tbody class="my-list">
        <tr>
          <td>Element</td>
          <td>321</td>
          <td>Something</td>
        </tr>
        <tr>
          <td>More elements</td>
          <td>444</td>
          <td>Cowabunga</td>
        </tr>
        <tr>
          <td>boom</td>
          <td>yo</td>
          <td>enough</td>
        </tr>
      </tbody>
    </table>
  </div>
</section>
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
input {
    padding: 10px 8px;
    width: 300px;
}
table {
    background-color: lightgrey;
    margin: 24px 0;
    text-align: left;
    width: 100%;
}
th {
    background-color: darkgrey;
}
th, td {
    padding: 4px 8px;
}
2
23.08.2018, 09:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2018, 09:54
Помогаю со студенческими работами здесь

Чистый js код
inf.delegate.store.push({selector:'.cn', callback: function(e, elem){ ms =...

jQuery or JavaScript?
Всем Здравствуйте!!! Я здесь, как и в программировании Новичек. И хотел у вас поинтересоваться. Вот...

JavaScript VS jQuery
Всем привет. Решил начать учить JavaScript. Но сейчас вот думаю, что лучше учить Js или jQuery?...

JavaScript и JQuery
Здравствуйте. Как сделать чтобы выводилось не в строку, а в столбик? &lt;!doctype html&gt; &lt;html...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru