За последние 24 часа нас посетили 18919 программистов и 1643 робота. Сейчас ищут 1528 программистов ...

Скрытый div блок на jquery и якорь на html

Тема в разделе "JavaScript и AJAX", создана пользователем WHITE_DRAGON, 27 ноя 2016.

  1. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    Есть код:
    HTML:
    1. <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    4. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    5. <script type="text/javascript">
    6. $(document).ready(function(){
    7. $('.spoiler_links').click(function(){
    8.   $(this).parent().children('.spoiler_body').slideToggle();
    9.   return false;
    10. });
    11. });
    12. <style type="text/css">
    13. .spoiler_body {display:none;background-color:#f1f1f1;}
    14. .spoiler_links {cursor:pointer;}
    15. </head>
    16. <br /><br />
    17. <center>
    18. <div><a name="1" class="spoiler_links"><strong>1</strong></a>
    19. <div class="spoiler_body">
    20. <p><a href="#2" name="1-1">2</a><br /><br />
    21. <a href="#2-1" name="1-2">3</a></p>
    22. </div></div>
    23. <br /><br />
    24. <div><a name="2" class="spoiler_links"><strong>4</strong></a>
    25. <div class="spoiler_body">
    26. <p><a href="#1" name="2-1">5</a><br /><br />
    27. <a href="#1-1" name="2-2">6</a><br /><br />
    28. <a href="#1-2" name="2-3">7</a></p>
    29. </div></div>
    30. </center>
    31. </body>
    32. </html>
    работает как надо. Показывает и скрывает блоки по клику, но столкнулся с проблемой html якорей. Блоки открыты. Все якоря работаю отлично, но если какой-то блок скрыт, то перехода с открытого блока к другому скрытому не осуществляется...
    Google не помог...
    В чем может быть проблема?
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    return false; уберите
    Код (Javascript):
    1. $('.spoiler_body a').on('click', function() {
    2.   $('a[name=' + $(this).attr('href').replace('#', '') + ']')
    3.   .closest('.spoiler_body')
    4.   .show();
    5. });
    --- Добавлено ---
    Тег center
     
    #2 Deonis, 27 ноя 2016
    Последнее редактирование: 27 ноя 2016
    WHITE_DRAGON нравится это.
  3. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    Не работает...
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Сочувствую, т.к. вы наверно единственный у кого бы не заработал код.
     
    WHITE_DRAGON нравится это.
  5. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    Спасибо!
    Забыл поставить
    Код (Javascript):
    1. });
     
  6. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    Возникли косяки... сначала с точками если якорь такой:
    HTML:
    1. <a href="#2.1" name="1.2">3</a>
    помогло замена на:
    Код (Javascript):
    1. $('a[name="' + $(this).attr('href').replace('#','') + '"]')
    а если вложения двойные или мнгоуровневые то не работает:
    HTML:
    1. <div><a name="1" class="spoiler_links"><strong>1</strong></a>
    2. <div class="spoiler_body">
    3. <p><a href="#2" name="1-1">2</a><br /><br />
    4. <a href="#sign-2.3.2-3" name="sign-2.3.2-3">3</a></p>
    5. </div></div>
    6. <br /><br />
    7. <div><a name="0" class="spoiler_links"><strong>0</strong></a>
    8. <div class="spoiler_body">
    9. <div><a name="2" class="spoiler_links"><strong>4</strong></a>
    10. <div class="spoiler_body">
    11. <p><a href="#1" name="sign-2.3.2-3">5</a><br /><br />
    12. <a href="#1-1" name="2-2">6</a><br /><br />
    13. <a href="#sign-2.3.2-3" name="2-3">7</a></p>
    14. </div></div></div></div>
     
  7. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @WHITE_DRAGON у вас два элемента с одинаковыми значениями "name" и одна из этих ссылка ведёт сама на себя:
    HTML:
    1. <a href="#1" name="sign-2.3.2-3">5</a>
    2. <a href="#sign-2.3.2-3" name="sign-2.3.2-3">3</a>
     
    WHITE_DRAGON нравится это.
  8. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    Сори. Это я печатался... просто основной текст весит 1 мб и там кода на несколько тысяч строк... а на форум для примера скидываю образец, на котором ставлю опыты)))
    я исправил ту ошибку, но переход все равно не происходит...
    HTML:
    1. <div><a name="-1" class="spoiler_links"><strong>-1</strong></a>
    2. <div class="spoiler_body">
    3. <div><a name="1" class="spoiler_links"><strong>1</strong></a>
    4. <div class="spoiler_body">
    5. <p><a href="#2" name="1-1">2</a></p>
    6. <p><a href="#sign-2.3.2-1" name="sign-2.3.2-3">3</a></p>
    7. </div></div></div></div>
    8. <br /><br />
    9. <div><a name="0" class="spoiler_links"><strong>0</strong></a>
    10. <div class="spoiler_body">
    11. <div><a name="2" class="spoiler_links"><strong>4</strong></a>
    12. <div class="spoiler_body">
    13. <p><a href="#1" name="sign-2.3.2-1">5</a></p>
    14. <p><a href="#1-1" name="2-2">6</a></p>
    15. <p><a href="#sign-2.3.2-3" name="2-3">7</a></p>
    16. </div></div></div></div>
     
  9. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @WHITE_DRAGON, дело не в значениях якоря, а в том, что необходимо раскрывать все родительские элементы ссылки, к которой этот якорь адресован. Последняя структура html отличается от той, что вы показали в начале, поэтому и метод необходимо изменить closets на parents:
    Код (Javascript):
    1. // Вместо
    2. $('a[name="' + $(this).attr('href').replace('#', '') + '"]')
    3.   .closest('.spoiler_body')
    4.   .show();
    5. // Пишем
    6. $('a[name="' + $(this).attr('href').replace('#', '') + '"]')
    7.   .parents('.spoiler_body')
    8.   .show();
     
    WHITE_DRAGON и denis01 нравится это.
  10. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    Deonis, подскажите, а где мне почитать или с чего начать.
    Хочу чтоб ко всему сделанному, помимо нажатия и перехода к нужному якорю, хочу чтобы при наведении на ссылку:
    HTML:
    1. <p><a href="#sign-2.3.2-5" name="sign-2.3.2-3">3</a> Текст 3</p>
    предварительно показывало текст в появившемся поверх страницы div блоке в пределах тега <p></p>, где находится якорь:
    HTML:
    1. <p><a href="#sign-2.3.2-3" name="sign-2.3.2-5">5</a> Текст 5</p>
    на тот случай если пользователь не захочет нажимать и переходить по ссылке, а ему будет достаточно увидеть содержание.
    Я знаю что якорям нужно присвоить class и выдирать текст при помощи replace(), но какой jquery код писать не знаю...
     
  11. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    Столкнулся только что с проблемой. На сайте код перехода к якорям не работает.
    скидывает на главную страницу, т.е. осуществляется переход по ссылке, которой впринципе нет...
    Код (Javascript):
    1. $(document).ready(function() {
    2.     $('.spoiler_links').click(function() {
    3.         $(this).parent().children('.spoiler_body').slideToggle('slow');
    4.     });
    5.     $('.spoiler_body a').on('click', function() {
    6.         $('a[name="' + $(this).attr('href').replace('#','') + '"]')
    7.             .parents('.spoiler_body')
    8.             .slideToggle('slow');
    9.     });
    10. });

    ???
     
    #11 WHITE_DRAGON, 28 ноя 2016
    Последнее редактирование: 28 ноя 2016
  12. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Я ошибся вчера с return false; Действие отменялось правильно для ссылок, по которым идёт раскрытие блока. Подправьте
    Код (Javascript):
    1. $('.spoiler_links').click(function() {
    2.     $(this).parent().children('.spoiler_body').slideToggle('slow');
    3.     return false;
    4. });
    5. // или
    6. $('.spoiler_links').click(function(e) {
    7.     e.preventDefault();
    8.     $(this).parent().children('.spoiler_body').slideToggle('slow');
    9. });
    --- Добавлено ---
    Начинать нужно с нативного JS, но есть подозрение, что вы этому совету не последуете. А если говорить о jQuery, то тут в принципе достаточно знать методы и что каждый из них делает. Для этого хватит и справочника. Если с инглишем тоже туго, то вот ресурс на русском. Староват, но на первое время сойдёт.
     
    WHITE_DRAGON и denis01 нравится это.
  13. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    не работает...
    http://www.avto-tut.by/pdd_rules.html
     
  14. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Синтаксические ошибки исправьте и ссылка должна вести на эту же страницу с хешем
     
    WHITE_DRAGON нравится это.
  15. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    В JS коде?
     
  16. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    WHITE_DRAGON нравится это.
  17. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    Код (Javascript):
    1. $(document).ready(function() {
    2.     $('.spoiler_links').click(function() {
    3.     $(this).parent().children('.spoiler_body').slideToggle('slow')
    4.     return false;
    5. });
    6.     $('.spoiler_body a').on('click', function() {
    7.     $('a[name="' + $(this).attr('href').replace('#', '') + '"]')
    8.         .parents('.spoiler_body')
    9.         .slideToggle('slow')
    10.         return false;
    11.     });
    12. });
    в урезанном варианте все работает, а вживляю на сайт и всё... GAME OVER
     
  18. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Это какой? И ошибка у вас на сайте так и осталась. В консоль заглядывайте изредка.
     
    WHITE_DRAGON нравится это.
  19. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    https://jsfiddle.net/t7a1xwcv/
    Убрал. Это код рамблера ошибку выдавал...
     
  20. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Код (Javascript):
    1. $(document).ready(function() {
    2.     $('.spoiler_links').click(function() {
    3.         $(this).parent().children('.spoiler_body').slideToggle('slow')
    4.         return false;
    5.     });
    6.     $('.spoiler_body a:not(.spoiler_links)').on('click', function() {
    7.         var href = $(this).attr('href');
    8.         $('a[name="' + href.substring(href.indexOf('#') + 1) + '"]')
    9.             .parents('.spoiler_body')
    10.             .show('slow');
    11.     });
    12. });
     
    WHITE_DRAGON нравится это.
  21. WHITE_DRAGON

    WHITE_DRAGON Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    Спасибо!!! Работает.
    Только почему то если многоуровневая вкладка, то не всегда в середине окна оказывает искомый якорь...???