Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Открывать таб по ссылке на нужной вкладке (https://javascript.ru/forum/dom-window/75361-otkryvat-tab-po-ssylke-na-nuzhnojj-vkladke.html)

Igorsrt 28.09.2018 15:41

Цитата:

Сообщение от рони (Сообщение 495533)
SuperZen,
а если так?
<script>
    var hash = location.hash;
    hash && document.querySelector(hash).classList.add('w-current')
</script>

а в чем разница с прошлым примером? вроде все тоже самое: табы переключаются, якорь в адресной строке продолжает отображаться... ;)

рони 28.09.2018 15:41

Igorsrt,
скрипт вниз страницы

SuperZen 28.09.2018 15:42

перед if(hash) посмотри что в hash? если там нет первым символом #, тогда замени на document.querySelector('#' + hash)....

SuperZen 28.09.2018 15:44

не тот сниппет скопировал походу, тут три строки
history.replaceState... еще добавилось
document.addEventListener('DOMContentLoaded', function () {
      var hash = location.hash.substr(1);
      hash && document.getElementById(hash).classList.add('w-current')
      history.replaceState(null, null, window.location.href.replace(/#.*$/, ''));//replace state
    })

Igorsrt 28.09.2018 15:47

Цитата:

Сообщение от рони (Сообщение 495539)
Igorsrt,
скрипт вниз страницы

так он внизу, на той странице где табы... правда jQuery ассинхронно подгружается - это может влиять?

рони 28.09.2018 16:00

Igorsrt,
пост №14 SuperZen, проверьте, и что консоль то писала?

Igorsrt 28.09.2018 16:00

Цитата:

Сообщение от SuperZen (Сообщение 495542)
не тот сниппет скопировал походу, тут три строки
history.replaceState... еще добавилось
document.addEventListener('DOMContentLoaded', function () {
      var hash = location.hash.substr(1);
      hash && document.getElementById(hash).classList.add('w-current')
      history.replaceState(null, null, window.location.href.replace(/#.*$/, ''));//replace state
    })

вот так заработало, спасибо еще раз... якорь на секунду отображается в адресной строке, потом пропадает...
Интересно, а в чем заключался вариант Рони - у него всегда классные решения (жалко что у меня сейчас не сработало)

SuperZen 28.09.2018 16:08

отличается тем, что var hash = location.hash возвращает hash без символа #, и потом запускается поиск элемента, но поскольку не указали что ищем элемент по id (в querySelector, как и jQ - надо явно указывать, что id это #, class это .), то поиск не находил элемент с id, например, tab1

рони 28.09.2018 16:11

Цитата:

Сообщение от Igorsrt
вот так заработало

тогда вот так и в самый верх
var hash = location.hash.substr(1);
history.replaceState(null, null, window.location.href.replace(/#.*$/, ''));
document.addEventListener('DOMContentLoaded', function () {
       hash && document.getElementById(hash).classList.add('w-current')
         })

рони 28.09.2018 16:13

Цитата:

Сообщение от SuperZen
отличается тем, что var hash = location.hash возвращает hash без символа #,

почему без #?


Часовой пояс GMT +3, время: 01:28.