Элемент навигационной панели Bootstrap активен в зависимости от имени файла?

В настоящее время я создаю свой веб-сайт с использованием фреймворка начальной загрузки, у меня есть небольшая проблема в том, что для пункта меню, который я хотел бы активировать, в зависимости от имени файла с использованием оператора if.

Например, если имя файла «о», вкладка «о» будет активной.

<li class = "nav-item active">
    <a class = "nav-link" href = "about.php">About <span class = "sr-only">(current)</span></a>
</li>
<li class = "nav-item">
    <a class = "nav-link" href = "#">Link</a>
</li>



var url = window.location.pathname;
var filename = url.substring(url.lastIndexOf('/')+1);
alert(filename);

Если кто-то может предложить помощь, я был бы очень признателен, я безуспешно работал над этим последние 3 часа.

Я бы посоветовал вам изучить, как работают теги <a>, похоже, это решит вашу проблему. html.com/tags/а

Mikail Bayram 30.04.2019 13:39
Поведение ключевого слова "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) для оценки ваших знаний,...
1
1
179
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

Вы уже успешно извлекаете имя файла из URL-адреса. При этом вы можете использовать селектор jQuery, чтобы добавить класс активный к соответствующей ссылке.

Предположение: вы используете jQuery, так как в настоящее время это требование для компонентов Bootstrap.

Пример:

<script>
var url = window.location.pathname;
var filename = url.substring(url.lastIndexOf('/')+1);    

$('a[href* = "' + filename + '"]').addClass('active');
</script>

Спасибо за ответ, я пытался заставить ваше предложение работать, но мне это не удалось, если у вас есть свободная минутка, не могли бы вы быстро проверить pastebin, пожалуйста, pastebin.com/KA33TkeJ

coding_with_tea 30.04.2019 21:06

просто чтобы уточнить, приведенный выше источник находится в файле с именем about.html

coding_with_tea 30.04.2019 21:08

@coding_with_tea две проблемы: 1) Line25 для этого решения имя файла должно отображаться в атрибуте href тега a. 2) Ваш скрипт нужно ставить после загрузки jQuery. См. этот исправленный pastebin (сохраните его как about.html) для сравнения. pastebin.com/4nvNsXDc

Felix 30.04.2019 21:16

Большое спасибо! это прекрасно, я действительно ценю это!

coding_with_tea 30.04.2019 21:22

Вы можете проверить все меню панели навигации, чтобы найти соответствие. Вот пример

$('.navbar ul li a').each(function(){
    var $this = $(this);
    // if the current path is like this link, make it active
    if ($this.attr('href').indexOf(filename) !== -1){
        $this.parents('li').addClass('active');
        return false;
    }
})

Где «имя файла» — это ваше фактическое текущее имя файла.

$('.nav-link').removeClass("active");
$('#' + filename).addClass("active");

используйте этот код внутри тега script и убедитесь, что вы добавили идентификатор к каждому li, эквивалентному имени файла.

Дайте мне знать, если вы столкнетесь с какой-либо другой проблемой.

Спасибо за ответ, я попробовал ваш пример, но, похоже, он у меня не работает, я разместил код на pastebin, если вы могли бы быстро взглянуть на меня, пожалуйста, спасибо pastebin.com/Uv4jqNYd

coding_with_tea 30.04.2019 14:09

Согласно вашему html-коду, вам нужно добавить класс active в родитель тега a. Итак, попробуйте этот код

$('.nav-item').removeClass('active'); //Remove active class from elements
$('a[href* = "' + filename + '"]').parent().addClass("active"); // add active class

это динамический способ с родным javascript

var url = window.location.pathname;
var filename = url.substring(url.lastIndexOf('/')+1);
var file = filename.split(".");
var TagItems = document.getElementsByClassName("nav-item");
for(navitem of TagItems)
    {
        for(item of navitem.children)
            {
              var targetFile = item.getAttribute("href").split(".");
                if (targetFile[0] == file[0])
                    navitem.classList.add("active");
                else
                    navitem.classList.remove("active");
            }
    }

Привет, я попробовал ваш код, но он не работает, pastebin.com/Qk6b95hZ, если бы вы могли быстро взглянуть, я был бы признателен, спасибо.

coding_with_tea 30.04.2019 17:26

я думаю, что это не работает, потому что вы используете php .. вы можете проверить это в моем коде codepen.io/aziada/pen/BEgaEV

Abdallah Ziada 01.05.2019 11:56

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