Проверка родительских чекбоксов и их раскрытие
Нужно чтобы ссылка-якорь открывала содержимое аккордеона в аккордеоне. В данном примере на #toggle-1.1. Можно ли как-то делать проверку родительских чекбоксов и открывать их? Скрипт приведенный ниже открывает по якорю только первый аккордеон. Очень нужно для входящих ссылок и продвижения ссылаться конкретно на пункт аккордеона.
<ul class="accordion"> <li class="accordion_item"> <label class="accordion_trigger" for="toggle-1">Заголовок 1</label> <input type="checkbox" class="accordion_toggle" id="toggle-1" /> <div class="accordion_target"> <ul class="accordion"> <li class="accordion_item"> <label class="accordion_trigger" for="toggle-1.1">Заголовок 1.1</label> <input type="checkbox" class="accordion_toggle" id="toggle-1.1" /> <div class="accordion_target"> <p> Текст </p> </div> </li> <li class="accordion_item"> <label class="accordion_trigger" for="toggle-1.2">Заголовок 1.2</label> <input type="checkbox" class="accordion_toggle" id="toggle-1.2" /> <div class="accordion_target"> <p> Текст </p> </div> </li> </ul> </div> </li> <li class="accordion_item"> <label class="accordion_trigger" for="toggle-2">Заголовок 2</label> <input type="checkbox" class="accordion_toggle" id="toggle-2" /> <div class="accordion_target"> <p> Текст </p> </div> </li> </ul> <script> window.addEventListener('load', function() { location.hash && (document.querySelector(location.hash).checked = true) }); </script> |
Pobedill,
прежде чем опубликовать html, проверяйте структуру тегов :( |
Извините. Исправил.
|
Pobedill,
на всякий случай точка недопустимый символ в id ... и строка 50 только для теста <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <ul class="accordion"> <li class="accordion_item"> <label class="accordion_trigger" for="toggle-1">Заголовок 1</label> <input type="checkbox" class="accordion_toggle" id="toggle-1" /> <div class="accordion_target"> <ul class="accordion"> <li class="accordion_item"> <label class="accordion_trigger" for="toggle-1.1">Заголовок 1.1</label> <input type="checkbox" class="accordion_toggle" id="toggle-1.1" /> <div class="accordion_target"> <p> Текст </p> </div> </li> <li class="accordion_item"> <label class="accordion_trigger" for="toggle-1.2">Заголовок 1.2</label> <input type="checkbox" class="accordion_toggle" id="toggle-1.2" /> <div class="accordion_target"> <p> Текст </p> </div> </li> </ul> </div> </li> <li class="accordion_item"> <label class="accordion_trigger" for="toggle-2">Заголовок 2</label> <input type="checkbox" class="accordion_toggle" id="toggle-2" /> <div class="accordion_target"> <p> Текст </p> </div> </li> </ul> <script> window.addEventListener("load", function() { var a = "#toggle-1.1" //var a = location.hash; a && (a = a.slice(1).split(".").reduce(function(b, a) { b = b ? b + "." + a : a; document.querySelector('[id="' + b + '"]').checked = !0; return b }, "")) }); </script> </body> </html> |
рони,
Для #toggle-1.1 работает даже несмотря на точки в id. А если таких ссылок очень много (274) ? :) |
Pobedill,
скрипт работает, несмотря на не корректный синтаксис, чего более? |
Дело в том, что скрипт раскрывает сразу пункт. А хотелось бы, чтобы по ссылке "URL#toggle-1.1". У меня прайс лист на сайте сделан аккордеоном, в нем 274 позиции, и я хочу бросать ссылки на одном форуме, чтоб они сразу вели на нужную позицию прайса. Скрипт с первого сообщения работает, но только для первого аккордеона (разделов прайса).
|
Pobedill,
не понимаю. |
Лучше посмотреть
Хочу чтобы переходя с любого сайта на мой сайт по ссылке-якорю, можно было перейти на конкретный пункт аккордеона. Например с такой ссылки <a href="http://mysite.com/price#toggle-6.2.30">Облицовка стен керамической плиткой</a> Находится эта вкладка в Отделочные работы=>Полы=>Облицовка стен керамической плиткой. То есть три аккордеона в одном. |
Pobedill,
да хоть 10 вложений, скрипт отработает как надо. 2 скрипта убрать снизу что ставили ранее заменить на это <script> window.addEventListener("DOMContentLoaded", function() { var a = location.hash; a && (a = a.slice(1).split(".").reduce(function(b, a) { b = b ? b + "." + a : a; document.querySelector('[id="' + b + '"]').checked = !0; var c = document.querySelector('[id="' + b + '"]').previousElementSibling; c && c.scrollIntoView(); return b }, "")) }); </script> в строке 36 нафига круглые скобки ? убрать ... научится пользоваться консолью и править ошибки ... без них и в первой редакции скрипт из 4 поста отработал бы свою функцию ... эх.... |
Часовой пояс GMT +3, время: 03:38. |