динамичный алфавитный список
Делаю список ингредиентов с алфавитными якорями и вызов якорей по нажатию на букву алфавита. Все вроде бы работает, но нужно пару функций, которые я не знаю как прикрутить.
Вот закинул в песочницу то что уже готово: Alphabet Этот весь список выводится динамически циклом из базы. Есть три вещи, которые я хочу исправить: 1. Так как алфавит должен быть полным (это только в песочнице я его немного урезал). А вот описание ингредиентов могут пополняться не все сразу, а постепенно. И какое то время, некоторые буквы выводят пустые якоря. Выглядит глупо - нужно сделать так что бы те якоря, под которыми нет ингредиента выводили некий текст-заглушку, например - "Empty section". 2. Несколько раздражает цепочка пустых якорей (столбик из точек). Как можно спрятать "пустые" якоря в общем списке, когда выводится все ингредиенты. Например, сейчас пустые якоря под буквами V W X Y Z а точки под ними уродливо выстроились в колонку. 3. При нажатии на название ингредиента открывается описание ингредиента, и пока оно открыто нужно как то добавить класс .active для этой ссылки (название ингредиента). Возможно я слишком усложнил. Но по другому не получается. Вся эта "гармонь" завязана на динамически формируемый список ингредиентов и там я ничего менять не могу. Вернее, все что мог изменить - уже изменил. Этот список формируется чужим плагином для WP и там те ещё пляски с бубном. По этому я решил тот плагин особо не трогать а попробовать воспользоваться тем что он выводит этот список и его уже обвесить скриптами. Может кто то знает более простое решение. Буду благодарен, если подскажете. (но учитывайте плз. я в js слабо разбираюсь) :yes: |
Round, могу помочь, 1000р в час...
|
Премного благодарен, но я хотел бы разобраться в этом, а не просто работу скинуть на кого то.
Я ожидаю в общении здесь получить идею как эти функции прикрутить к тому что уже есть. По первому вопросу (заглушка - "Empty section") я так понимаю, что нужно как то проверять что дочерний блок не пустой, а если он пуст, то все прятать и показать лишь span - "Empty section". Только вот, как это сделать? Второй вопрос может быть завязан с первым. Там же где определяем что блок пуст - назначать некий класс для этого блока, например .empty (display:hide) По третьему вопросу, я пока что вообще не представляю как это сделать. Спасибо всем за активное общение. ;) |
Третий вопрос уже не актуален.
Все решил простой подменой класса $(".ing-title").click(function(){ $(".active-ing").removeClass("active-ing"); $(this).addClass("active-ing"); }); По первым двум вопросам нужен совет. |
Все сделал сам.
Может кому пригодится - вот решения: 1. что бы сделать заглушку для пустых букв немного изменил код подсчета букв и повесил фейд-ин для нового элемента с классом "blank", а в этот элемент положил свой текст-заглушку. 2. что бы убрать пустые якоря, дописал поиск следующего брата и если его нет, то элемент прячем. вернее, у меня вышло зеркально - я сначала спрятал все якоря, а потом дисплей-блок только для тех у которых есть брат с нужным мне классом. 3. третье решение я описал выше... Вот что в итоге получилось: $("a").click(function(){ $(".active-ing").removeClass("active-ing"); $(this).addClass("active-ing"); }); var all_spans = $('.alpha-row .accordion-inner').hide(); $('.alpha-row a').click(function(e){ var thisSpan = $(this).parent().find('.accordion-inner'), isShowing = thisSpan.is(":visible"); // Hide all spans all_spans.hide(); // If our span *wasn't* showing, show it if (!isShowing) { thisSpan.show(); } e.preventDefault(); }); var triggers = $('.alphabet-nav a'); var filters = $('.alpha-box ing'); $(".noresult").hide(); triggers.click(function() { var takeLetter = $(this).text(), count = 0; filters.parent().hide(); $(".noresult").hide(); $.each(filters, function(i, item) { var compareFirstLetter = $(item).text().substr(0, 1); if (compareFirstLetter == takeLetter) { $(item).parent().fadeIn(222); count++; } }); if (count === 1) { $(".noresult").fadeIn(22); } }); $(".alpha-box .alpha-row").sort(asc_sort).appendTo('.alpha-box'); //$("#debug").text("Output:"); function asc_sort(a, b){ return ($(b).text()) < ($(a).text()) ? 1 : -1; } $(".ing-letter").next('.ing-list').each(function() { $(this).prev().css({display: 'block'}); }); |
Часовой пояс GMT +3, время: 07:32. |