Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2020, 13:46
Новичок на форуме
Отправить личное сообщение для dasha123 Посмотреть профиль Найти все сообщения от dasha123
 
Регистрация: 14.01.2020
Сообщений: 4

Люди добрые. Помогите, а то скоро рехнусь :)
Есть таблица в которой нужно фильтровать столбцы с помощью выпадающих списков.
<TABLE id = "filtertable">
<TR>
	<TD><label for="filterRaceRun">Select Race-run:</label><SELECT id = "filterRaceRun" onchange="tableSearchRun();" >
		<OPTION></OPTION>
		<OPTION>Zeitlauf</OPTION>
		<OPTION>Vorlauf</OPTION>
		<OPTION>Zwischenlauf</OPTION>
		<OPTION>Lauf</OPTION>
		<OPTION>Langstrecke</OPTION>
		<OPTION>Endlauf</OPTION>
	</SELECT></TD>
	<br>
	<TD><label for="filterRaceDay">Select Race-Day:</label><SELECT id = "filterRaceDay" onchange="tableSearchDay();">
		<OPTION></OPTION>
		<OPTION>Thursday, 27.06.2019</OPTION>
		<OPTION>Friday, 28.06.2019</OPTION>
		<OPTION>Saturday, 29.06.2019</OPTION>
		<OPTION>Sunday, 30.06.2019</OPTION>
	</SELECT></TD>
	<br>
	<TD><label for="filterRaceClass">Select Race-class:</label><INPUT  id = "filterRaceClass" onkeyup="tableSearchClass();" placeholder = "Search Race-class"/></TD>
</TR>
</TABLE>
</DIV>
<DIV id = "tablet">	
	<table id = "table_rennliste">
	<TH id = "table_rennliste_race_no_h"><A>Race-number</A></TH>
	<TH id = "table_rennliste_race_class_h"><A>Race-class</A></TH>
	<TH id = "table_rennliste_race_run_h"><A>Race-run</A></TH>
	<TH id = "table_rennliste_race_start_h"><A>Planned start</A></TH>
    <tr>
        <td>1</td>
        <td><a href="http://philipp.imas-sport.com/Brandenburg/race.php?competition=wettkampf_206&race_id=1#oben" class="link">K1 200 Men</a></td>
        <td>Zeitlauf</td>
        <td>Thursday, 27.06.2019 - 18:00</td>
    </tr>
    <tr>
        <td>2</td>
        <td><a  href="http://philipp.imas-sport.com/Brandenburg/race.php?competition=wettkampf_206&race_id=2#oben" class="link" >K2 500 Woman</a></td>
        <td>Lauf</td>
        <td>Friday, 28.06.2019 - 9:00</td>
    </tr>
    <tr>
        <td>3</td>
        <td><a  href="http://philipp.imas-sport.com/Brandenburg/race.php?competition=wettkampf_206&race_id=3#oben" >C1 1000 Junior</a></td>
        <td>Endlauf</td>
        <td>Saturday, 29.06.2019 - 8:40</td>
    </tr>
    <tr>
        <td>4</td>
        <td><a  href="http://philipp.imas-sport.com/Brandenburg/race.php?competition=wettkampf_206&race_id=4#oben" >C4 500 Woman</a></td>
        <td>Langstrecke</td>
        <td>Thursday, 27.06.2019 - 18:11</td>
    </tr>
    <tr>
        <td>5</td>
        <td><a  href="http://philipp.imas-sport.com/Brandenburg/race.php?competition=wettkampf_206&race_id=5#oben" >WC1 200 Man</a></td>
        <td>Langstrecke</td>
        <td>Friday, 28.06.2019 - 9:05</td>
    </tr>
	</table>
	</DIV>

function tableSearchRun() {
    var inwin = document.getElementById('filterRaceRun');
	var table = document.getElementById('table_rennliste');
    var regPhrase = new RegExp(inwin.value, 'i');
    var flag = false;
    for (var i = 1; i < table.rows.length; i++) {
        flag = false;
        for (var j = table.rows[i].cells.length - 1; j >= 0; j--) {
            flag = regPhrase.test(table.rows[i].cells[j].innerHTML);
            if (flag) break;
        }
        if (flag) {
            table.rows[i].style.display = "";
        } else {
            table.rows[i].style.display = "none";
        }

    
}
function tableSearchDay() {
    var inwin = document.getElementById('filterRaceDay');
    var table = document.getElementById('table_rennliste');
    var regPhrase = new RegExp(inwin.value, 'i');
    var flag = false;
    for (var i = 1; i < table.rows.length; i++) {
        flag = false;
        for (var j = table.rows[i].cells.length - 1; j >= 0; j--) {
            flag = regPhrase.test(table.rows[i].cells[j].innerHTML);
            if (flag) break;
        }
        if (flag) {
            table.rows[i].style.display = "";
        } else {
            table.rows[i].style.display = "none";
        }

    }
}
function tableSearchClass() {
    var inwin = document.getElementById('filterRaceClass');
    var table = document.getElementById('table_rennliste');
    var regPhrase = new RegExp(inwin.value, 'i');
    var flag = false;
    for (var i = 1; i < table.rows.length; i++) {
        flag = false;
        for (var j = table.rows[i].cells.length - 1; j >= 0; j--) {
            flag = regPhrase.test(table.rows[i].cells[j].innerHTML);
            if (flag) break;
        }
        if (flag) {
            table.rows[i].style.display = "";
        } else {
            table.rows[i].style.display = "none";
        }

    }
}


мне нужно чтобы каждый фильтр дополнял друг друга. а они взаимозаменяют. и поиск происходит не по конкретному слову из выпадающего списка, а по всей таблице. помогите пожалуйста.

Последний раз редактировалось dasha123, 14.01.2020 в 13:57.
Ответить с цитированием
  #2 (permalink)  
Старый 14.01.2020, 13:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от dasha123
мне нужно чтобы каждый фильтр дополнял друг друга. а они взаимозаменяют.
Так у тебя всегда идет анализ всех строк... А нужно тогда смотреть только видимые.
Ответить с цитированием
  #3 (permalink)  
Старый 14.01.2020, 13:59
Новичок на форуме
Отправить личное сообщение для dasha123 Посмотреть профиль Найти все сообщения от dasha123
 
Регистрация: 14.01.2020
Сообщений: 4

Сообщение от ksa Посмотреть сообщение
Так у тебя всегда идет анализ всех строк... А нужно тогда смотреть только видимые.
я не понимаю как это реализовать
Ответить с цитированием
  #4 (permalink)  
Старый 14.01.2020, 14:08
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от dasha123
я не понимаю как это реализовать
У тебя есть циклы по строкам... Там нужно добавлять условия о видимости строки.
Так же нужно проверять не каждый фильтр в отдельности... А все разом, в одном цикле...
Ответить с цитированием
  #5 (permalink)  
Старый 14.01.2020, 14:13
Новичок на форуме
Отправить личное сообщение для dasha123 Посмотреть профиль Найти все сообщения от dasha123
 
Регистрация: 14.01.2020
Сообщений: 4

Сообщение от ksa Посмотреть сообщение
У тебя есть циклы по строкам... Там нужно добавлять условия о видимости строки.
Так же нужно проверять не каждый фильтр в отдельности... А все разом, в одном цикле...
вроде на словах все понятно, а как в коде это реализовать..
Ответить с цитированием
  #6 (permalink)  
Старый 14.01.2020, 14:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от dasha123
а как в коде это реализовать..
Ты умеешь программировать на JS?
Ответить с цитированием
  #7 (permalink)  
Старый 14.01.2020, 14:16
Новичок на форуме
Отправить личное сообщение для dasha123 Посмотреть профиль Найти все сообщения от dasha123
 
Регистрация: 14.01.2020
Сообщений: 4

Сообщение от ksa Посмотреть сообщение
Ты умеешь программировать на JS?
только начала..
Ответить с цитированием
  #8 (permalink)  
Старый 14.01.2020, 16:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от dasha123
мне нужно чтобы каждый фильтр дополнял друг друга
что нужно, чтобы в строке были все параметры поиска или хотя бы один из параметров?
Ответить с цитированием
  #9 (permalink)  
Старый 15.01.2020, 03:28
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

dasha123, вам достаточно одной функции, которая будет фильтровать строки таблицы.
function filterTableRows() {
	var table = document.getElementById("table_rennliste");
	var raceRun = document.getElementById("filterRaceRun").value;
	var raceDay = document.getElementById("filterRaceDay").value;
	var raceClass = document.getElementById("filterRaceClass").value;
	var raceClassPattern = new RegExp(escape(raceClass), "i");
	
	for (var i = 0; i < table.tBodies[0].rows.length; i++) {
		var row = table.tBodies[0].rows[i];
		var isRowVisible = (
			row.cells[2].textContent.includes(raceRun) &&
			row.cells[3].textContent.startsWith(raceDay) && 
			raceClassPattern.test(row.cells[1].textContent)
		);
		
		row.style.display = isRowVisible ? "" : "none";
	}
	
	function escape(string) {
		return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
	}
}


В HTML вам нужно заменить...
  • строку №3
    <TD><label for="filterRaceRun">Select Race-run:</label><SELECT id = "filterRaceRun" onchange="tableSearchRun();" >
    
    на
    <TD><label for="filterRaceRun">Select Race-run:</label><SELECT id = "filterRaceRun" onchange="filterTableRows();" >
    
  • строку №13
    <TD><label for="filterRaceDay">Select Race-Day:</label><SELECT id = "filterRaceDay" onchange="tableSearchDay();">
    
    на
    <TD><label for="filterRaceDay">Select Race-Day:</label><SELECT id = "filterRaceDay" onchange="filterTableRows();">
    
  • строку № 21
    <TD><label for="filterRaceClass">Select Race-class:</label><INPUT  id = "filterRaceClass" onkeyup="tableSearchClass();" placeholder = "Search Race-class"/></TD>
    
    на
    <TD><label for="filterRaceClass">Select Race-class:</label><INPUT  id = "filterRaceClass" oninput="filterTableRows();" placeholder = "Search Race-class"/></TD>
    
    Обратите внимание — событие onkeyup заменено на oninput, чтобы обрабатывался ввод любым способом.
  • строки №27–30
    <TH id = "table_rennliste_race_no_h"><A>Race-number</A></TH>
        <TH id = "table_rennliste_race_class_h"><A>Race-class</A></TH>
        <TH id = "table_rennliste_race_run_h"><A>Race-run</A></TH>
        <TH id = "table_rennliste_race_start_h"><A>Planned start</A></TH>
    
    оберните в элемент <thead>
    <thead>
    <TH id = "table_rennliste_race_no_h"><A>Race-number</A></TH>
        <TH id = "table_rennliste_race_class_h"><A>Race-class</A></TH>
        <TH id = "table_rennliste_race_run_h"><A>Race-run</A></TH>
        <TH id = "table_rennliste_race_start_h"><A>Planned start</A></TH>
    </thead>
    

Пример целиком можно посмотреть тут — https://codepen.io/Malleys/pen/jOEpGEm?editors=1010
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добрые люди помогите с ползунком jquery ui slider SERblY Общие вопросы Javascript 91 20.04.2018 15:34
помогите добрые люди alexvirgin Общие вопросы Javascript 2 15.10.2012 14:50
Люди добрые, помогите чайнику решить задание. Kostyk92 Элементы интерфейса 6 06.02.2012 20:21
Помогите люди добрые! wipos (X)HTML/CSS 2 03.02.2011 09:52
Помогите люди добрые luraVefrafe jQuery 2 09.06.2010 09:16