Фильтр блоков с помощью 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, но подозреваю, это обилие лишней писанины.) |
<!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,
строка 25 лишняя(зачем 2 раза менять стиль), достаточно сделать условие в строке 23 |
ну ок. Поправлю
|
Без привязки к последовательности размещения
<!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>
|
Без привязки и без 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>
|
Благодарю.
|
| Часовой пояс GMT +3, время: 03:59. |