Javascript.RU

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

Фильтр блоков с помощью select
Добрый день.
Ситуация такова... Есть Nное количество дивов и 1 select над ними.
Select из себя представляет названия городов, по умолчанию "Все города". А сами блоки по сути относятся к определенному городу.

<select>
     <option>Все города</option>
     <option>Москва</option>
     <option>Казань</option>
     <option>Сочи</option>
</select>
<div>Инфо о Москве</div>
<div>Инфо о Казани</div>
<div>Инфо о Сочи</div>


Вопрос: как удобнее фильтровать отображение блоков в связи с выбором select'а? нужно ли задавать дополнительные атрибуты для блоков или достаточно обойтись id ?

(Была идея к каждому городу привязать функцию, которая задавала бы другим блокам display: none, но подозреваю, это обилие лишней писанины.)
Ответить с цитированием
  #2 (permalink)  
Старый 02.10.2017, 13:58
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<select>
		<option>Все города</option>
		<option>Москва</option>
		<option>Казань</option>
		<option>Сочи</option>
	</select>
	<div>Инфо о Москве</div>
	<div>Инфо о Казани</div>
	<div>Инфо о Сочи</div>

	<script>
	var div = document.querySelectorAll('div');
		document.querySelector('select').onchange=function(){
			var n = this.selectedIndex;
			[].forEach.call(div, function(el, i){
				el.style.display = n && i !== n-1 ?  'none':'block';
			});
		};
	</script>
</body>
</html>

Последний раз редактировалось j0hnik, 02.10.2017 в 15:28.
Ответить с цитированием
  #3 (permalink)  
Старый 02.10.2017, 14:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

j0hnik,
строка 25 лишняя(зачем 2 раза менять стиль), достаточно сделать условие в строке 23
Ответить с цитированием
  #4 (permalink)  
Старый 02.10.2017, 14:58
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

ну ок. Поправлю
Ответить с цитированием
  #5 (permalink)  
Старый 02.10.2017, 15:10
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Без привязки к последовательности размещения
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<select>
		<option value="*">Все города</option>
		<option value="ms">Москва</option>
		<option value="kz">Казань</option>
		<option value="sc">Сочи</option>
	</select>
	<div id="kz">Инфо о Казани</div>
	<div id="sc">Инфо о Сочи</div>
        <div id="ms">Инфо о Москве</div>

	<script>
	var div = document.querySelectorAll('div');
		document.querySelector('select').onchange=function(){
			idSel = this.value;
			[].forEach.call(div, function(el){
				el.style.display=(idSel=="*"||idSel==el.id)?'block':'none';
			});
		};

	</script>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 02.10.2017, 15:56
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Без привязки и без id и value (экспериментальный)
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<select>
		<option>Все города</option>
		<option>Москва</option>
		<option>Казань</option>
		<option>Сочи</option>
	</select>
	<div>Инфо о Москве</div>
	<div>Инфо о Казани</div>
	<div>Инфо о Сочи</div>

	<script>

		var div = document.querySelectorAll('div');
		document.querySelector('select').onchange=function(){
			var n = this.options[this.selectedIndex].textContent.slice(0, -2);
			[].forEach.call(div, function(el, i){
				el.style.display = el.textContent.match(n)||'Все горо'.match(n) ? 'block':'none';
			});
		};

	</script>
</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 03.10.2017, 16:14
Новичок на форуме
Отправить личное сообщение для andamurobl Посмотреть профиль Найти все сообщения от andamurobl
 
Регистрация: 11.07.2017
Сообщений: 6

Благодарю.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать 50% высоты у дочерних блоков, с помощью flexbox? snovapavel (X)HTML/CSS 2 07.11.2016 11:32
Как изменить Select с помощью JS Alex921 Общие вопросы Javascript 4 04.01.2016 16:55
Фильтр select на jquery dsk8m jQuery 2 21.01.2014 19:43
Помогите преобразовать фильтр таблицы под select greencard jQuery 2 21.08.2013 12:36
Подгрузка блоков из php с помощью js oster_j Общие вопросы Javascript 0 18.03.2013 13:39