Активировать вкладку на основе текущего URL

У меня есть элементы списка в списке "#registration_form_list". Активным элементом списка по умолчанию является элемент списка с идентификатором "#generalInfo". Но я хочу этого, когда URL-адрес вроде к этому «http: //proj.test/user/profile? user = 1 # myTickets» осуществляется доступ, вкладка, которая остается активной, является вкладкой «Мои билеты».

Поэтому я хочу активировать вкладку на основе текущего URL-адреса. Но он не работает с jQuery ниже.

Ты знаешь почему?

HTML:

<ul class = "nav nav-pills bg-light-gray registration_form_list" role = "tablist">
    <li class = "">
        <a class = "nav-link active" href = "#generalInfo" data-toggle = "tab" role = "tab">
            <i class = "fa fa-user" aria-hidden = "true"></i> <span class = "d-none d-lg-inline-block">General Info</span></a>
    </li>
    <li class = "disabled">
        <a class = "nav-link" href = "#myTickets" data-toggle = "tab" role = "tab">
            <i class = "fa fa-calendar" aria-hidden = "true"></i> <span
                    class = "d-none d-lg-inline-block">My Tickets</span></a>
    </li>
    <!-- more list items -->
</ul>

jQuery:

   var path = window.location.href;

        $('.registration_form_list a').each(function () {
            var hash = $(this).attr('href').split('#')[1];
            //alert(hash); appaers
            if (this.href === path) {
                // alert('test'); dont appears
                $('.registration_form_list a').removeClass('active');
                $('a[href = "#'+hash+'"]').addClass('active');
            }
        });

Например, у меня есть метод, в котором пользователь перенаправляется на «http: //proj.test/user/profile? user = 1 # myTickets», но активна вкладка «#generalInfo», когда пользователь обращается к странице.

return redirect(route('user.index', ['user' => Auth::id()]).'#myTickets');

Содержимое вкладок находится внутри содержимого вкладок с соответствующим идентификатором, например:

<div class = "tab-content registration_body bg-white" id = "myTabContent">

    <div class = "tab-pane fade show active clearfix" id = "generalInfo" role = "tabpanel" aria-labelledby = "home-tab">
    <!-- #generalInfo content -->
    </div>

    <div class = "tab-pane clearfix fade" id = "myTickets" role = "tabpanel" aria-labelledby = "contact-tab">
        <!-- #myTickets content -->
    </div>
    <!-- other tabs -->
</div>

Это полный код JavaScript? Код находится в обработчике .ready()?

mpallansch 04.06.2018 19:49

Спасибо, да. Предупреждение (хеш); появляется, но внутри "if (this.href === path)" появляется предупреждение, например: "if (this.href === path) {alert ('test'); ..." не появляется.

user9659025 04.06.2018 19:59

какое значение вы передаете в this.href ??

paudel 04.06.2018 20:03

Если вы переключите this.href === path на hash === window.location.hash.replace('#', ''), срабатывает ли второе предупреждение?

mpallansch 04.06.2018 20:06

@joW, возможно, вы захотите взглянуть на это более общее решение stackoverflow.com/questions/12131273/…

Bart 05.06.2018 00:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
5
1 862
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуй это

$(document).ready(function() {
  // Obtain hash value from the url
  var hash = window.location.hash;
  // Try to find a nav-link with the hash
  var hashNavLink = $('.nav-link[href = "'+hash+'"]');

  // If there is no link with the hash, take default link
  if (hashNavLink.length === 0) {
    hashNavLink = $('.nav-link[href = "#generalInfo"]');
  }

  hashNavLink.addClass('active');
});

В этом случае вы можете быть уверены, что если в URL-адресе указан неправильный хеш, ссылка #generalInfo будет установлена ​​как активная, а в других случаях правильная ссылка будет всегда активной.

Вы можете получить значение hash непосредственно из Место расположения.

Если бы он использовал этот код, ему пришлось бы удалить класс active из ссылки #generalInfo в HTML, иначе несколько ссылок могли бы иметь активный класс. В противном случае это хороший ответ.

mpallansch 04.06.2018 20:14

Спасибо, но есть проблема. Когда пользователь перенаправляется на «proj.test / user / profile? User = 1 # myTickets»; вкладка «Мои билеты» остается активной, но содержимое вкладки «Мои билеты» не отображается. По-прежнему отображается содержимое вкладки "#generalInfo"

user9659025 05.06.2018 15:25

Просто добавьте hashNavLink.tab('show') после hashNavLink.addClass('active'); Это должно помочь

Revinand 05.06.2018 15:49

var path = window.location.href; возвращает полный путь вашего URL.

this.href равен #generalInfo, поэтому он никогда не будет равен http://proj.test/user/profile?user=1#generalInfo

Если вы хотите, чтобы URL-адрес соответствовал значению href вашего тега привязки, вам нужно сократить свой path.

//This will always assume you're only using 1 pound sign    
var path = window.location.href.split("#")[1];

Таким образом, path = generalInfo (при условии, что вы находитесь на http: //proj.test/user/profile? user = 1 # generalInfo)

Затем вам нужно сделать ваше условие if (hash === path){} (не if (this.href === path), потому что this.href равен #generalInfo, а не только generalInfo.

Так бы сейчас искал generalInfo === generalInfo

Весь код будет:

 var path = window.location.href.split('#')[1]; //equals the hash

    $('.registration_form_list a').each(function () {
        var hash = $(this).attr('href').split('#')[1];
        //alert(hash); appaers
        if (hash === path) {
            // alert('test'); dont appears
            $('.registration_form_list a').removeClass('active');
            $('a[href = "#'+hash+'"]').addClass('active');
        }
    });

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

Спасибо, но есть проблема. Когда пользователь перенаправляется на «proj.test / user / profile? User = 1 # myTickets»; вкладка «Мои билеты» остается активной, но содержимое вкладки «Мои билеты» не отображается. По-прежнему отображается содержимое вкладки "#generalInfo"

user9659025 05.06.2018 15:25

@johnW Основываясь на вашем комментарии, вам может потребоваться либо обновить свой вопрос, либо начать новый. Вопрос, прочитанный при ответе, спрашивал, как сделать вкладка активным. Нам нужно будет увидеть ваш HTML-код, чтобы узнать, где на самом деле должно быть показано, что

ntgCleaner 05.06.2018 15:26

Другие вопросы по теме