#jquery #filter #href #clicking
#jquery #Фильтр #href #щелчок
Вопрос:
Я пытаюсь выполнить поиск propper по значениям href, но когда я нажимаю на каждое значение, оно показывает мне пустую таблицу, а индекс значений всегда равен 0. Я перепробовал буквально все, но ничего из этого не сработало. Я думаю, что основная проблема заключается в скрипте, потому что он всегда показывает мне пустой индекс каждого элемента.
Может кто-нибудь сказать мне, чего мне не хватает?
Вот код:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script> // This script is working
$(document).ready(function(){
$("#myInput").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("#myTable tr").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});
});
</script>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
.odd {
background: #5a95ee;
}
.even{
background: #7eb9e0;
}
</style>
</head>
<body>
<input id="myInput" type="text" placeholder="Search.." style="float: right; width: 500px;" value="">
<br><br>
<table>
<thead>
<tr>
<th>Predmet</th>
<th>Tip</th>
<th>Nastavnik</th>
<th>Grupe</th>
<th>Dan</th>
<th>Termin</th>
<th>Ucionica</th>
</tr>
</thead>
{% for raspored in rasporedi %}
<tbody id="myTable">
<tr class="{{ loop.cycle('odd', 'even') }}">
<td > {{raspored['predmet']}}</td>
<td>{{raspored['tip']}}</td>
<td >{{raspored['nastavnik']}}</td>
<td>{{raspored['grupe']}}</td> // Python list ( data from mongodb )
<td>{{raspored['dan']}}</td>
<td>{{raspored['termin']}}</td>
<td>{{raspored['ucionica']}}</td>
</tr>
</tbody>
{% endfor %}
</table>
<br> <br>
<table style="width: 400px;" style="margin:0 auto;">
<thead>
<tr >
<th>Nastavnik</th>
<th>Ucionica</th>
</tr>
</thead>
{% for raspored in dr %}
<tbody id="myTabledva">
<tr>
<td class="nastavnik {{ loop.cycle('odd', 'even') }}" > <a href="#" >{{raspored['nastavnik']}}</a></td>
<td class="ucionica {{ loop.cycle('odd', 'even') }}"> <a href="#" >{{raspored['ucionica']}}</a></td>
</tr>
</tbody>
<script> // Something is wrong with this script but i don't know what
$(document).on("click", ".nastavnik", function(){
var nastavnik = $("#myInput").val($(this).text());
$("#myTable tr").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(nastavnik) > -1 )
});
});
</script>
{% endfor %}
</table>
</body>
</html>
<script> // Something is wrong with this script but i don't know what
$(document).on("click", ".nastavnik", function(){
var nastavnik = $("#myInput").val($(this).text());
$("#myTable tr").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(nastavnik) > -1 )
});
});
</script>
Комментарии:
1. Добро пожаловать в SO. Вы неправильно поняли, что
filter()
делает. Вы, кажется, полагаете, что он будет показывать / скрывать элементы, что не является его задачей. Он просто отфильтровывает набор сопоставленных элементов до подмножества. Ознакомьтесь с его документацией .2. Спасибо. Итак, если filter не является функцией поддержки, что я должен использовать для отображения значения щелчка в таблице (поиск в реальном времени)?
3. Это правильная функция — она просто не выполняет то, что вы думали. Вам нужно отфильтровать либо
show()
либоhide()
в коллекции.4. Итак, вместо переключения мне нужно показать () ? $ (this). переключить ($(this).text().toLowerCase().indexOf(наставник) > -1 ) это будет: $(this).show($ (this).text().toLowerCase().indexOf(наставник) > -1 ) ?
5. Не совсем так. Возможно, вам понадобится еще несколько руководств по jQuery. Вы предполагаете слишком много, например, думая, что можете передавать аргументы
show()
. jQuery работает с помощью цепочки — сначала вы создаете коллекцию элементов, затем вы что-то делаете с ними, связывая с ними метод. Итак: $(‘.some.selector’).filter(функция() { /* … */ }).hide(), for example.
toggle()` эквивалентноshow()
/hide()
, так что да, вы тоже можете это использовать.
Ответ №1:
Вы, вероятно, хотите что-то вроде:
$(document).on("click", ".nastavnik", function() {
let nastavnik = $("#myInput").val(); //<-- get, not set, the entere val
$("#myTable tr").show().filter(function() {
return $(this).text().toLowerCase().indexOf(nastavnik.toLowerCase()) == -1;
}).hide();
});
Логические:
- Получить введенное значение
- Получить все строки таблицы — показать все по умолчанию
- Отфильтруйте строки таблицы по тем, которые не содержат введенного поиска.
- Скройте эти строки.
Комментарии:
1. Я попробовал это сейчас, но это не сработало. Он показывает целую таблицу, а не текст с нажатой кнопкой мыши.
2. Нет никакой причины, которая не должна работать. Пожалуйста, воспроизведите проблему в скрипке JS или аналогичной, используя мой код, для демонстрации.
3. jsfiddle.net/mristic2719s/svL0ydta/7 Вот jsfiddle , когда вы нажимаете на «Какой-то учитель», он не отображается (обновляется) в таблице.
4. и, извините, это ссылка для совместной работы jsfiddle.net/5pnxa2kw/#amp;togetherjs=4yhzuA9g3p