24.05.2016, 10:46
|
Интересующийся
|
|
Регистрация: 07.03.2013
Сообщений: 16
|
|
Рубрикатор по алфавиту
Добрый день, коллеги.
Помогите решить задачку.
На страницу выводится список неких объектов в алфавитном порядке. Допустим, растений. И алфавитный указатель, в котором буквы, для которых на странице есть растения, оформлены ссылками, а остальные - просто текст.
Вопрос в том, какой на эти ссылки прикрепить код, чтобы по клику на них скрывались все растения, кроме начинающихся на эту букву.
Вот пример.
На страничке есть Арбуз, Алыча, Слива, Яблоко.
Соответственно, в указателе ссылками являются А, С, Я. По клику на А на страничке должны остаться только Арбуз и Алыча, всё остальное должно скрыться.
По идее, это не так сложно, но никак не соображу, как это сделать.
|
|
24.05.2016, 11:02
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
MAzZYBiG,
можно html, а ещё лучше обьект с данными.
|
|
25.05.2016, 20:47
|
Интересующийся
|
|
Регистрация: 07.03.2013
Сообщений: 16
|
|
Не очень понял.
Может есть какие-нибудь более-менее готовые варианты? А то поиском тяжело такое искать
|
|
25.05.2016, 21:17
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
MAzZYBiG,
скажем это обьект
{"А" : ["Арбуз","Алыча"], "С" : ["Слива"]}
или как оно у вас и обьект и html
|
|
25.05.2016, 23:44
|
Профессор
|
|
Регистрация: 22.08.2013
Сообщений: 217
|
|
Если у вас данные представлены, как показал Рони, то вот так примерно (можно и покороче, но лень думать)
var data = {"А" : ["Арбуз","Алыча"], "С" : ["Слива"], "В" : ["Виноград", "Вишня"]};
function displayData(data){
var body = document.body;
for(var val in data){
var span = document.createElement('span');
span.innerHTML = val
span.className = "selected"
body.appendChild(span)
}
}
function filterData(el){
var r = document.getElementById('result')
var arr = [];
for(i in data) {
i == el? arr.push(data[i]):'';
}
var e = arr.join(', ')
r.innerHTML = e
}
displayData(data)
var clicked = document.querySelectorAll('.selected');
for(var i = 0; i<clicked.length; i++){
clicked[i].addEventListener('click', function(event){
filterData.call(null, event.target.innerHTML)
})
}
=======================================
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div id="result"></div>
</body>
</html>
Вот ссылка на песочницу
Последний раз редактировалось Царь Леонид, 26.05.2016 в 00:11.
|
|
26.05.2016, 09:50
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от рони
|
а ещё лучше обьект с данными
|
Почему? По идее списки уже приходят сортированные по алфавиту, и если скрытые, то проще показать связанное или я чего-то не дополнял?
|
|
26.05.2016, 10:43
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
laimas,
а как узнать что скрывать? парсить какую-то data или выборку по классу икс делать? нужно же знать связанное или как то связать, от чего плясать-то ?
|
|
26.05.2016, 10:55
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ну а как табуляторы, аккордеоны работают? Раскрывается же связанное с кнопкой и проблем нет. Я так думаю, что уж если списки и нужен рубрикатор, то это уже сортировано по алфавиту, а связать списки с литерами не проблема.
|
|
26.05.2016, 11:04
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
laimas,
данные проще брать из готового обьекта, то что ты пишешь я не понимаю, извини, или понимаю как опять парсить что-то.
|
|
26.05.2016, 11:20
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
рони, если клиент сам готовит списки, то да, но если списки отдает сервер, ну что сложного связать их с литерами. Пусть речь об UTF, код А = 1040, щелкнули по литере А, получили ее код, показали список, например list + А.charCodeAt.
|
|
|
|