data-toggle='tab' или ='pills' не позволяет работать URL
Прежде всего, я хотел сказать, что я много читал об этом в Интернете, и во всех найденных решениях я не мог их правильно реализовать, некоторые исправили некоторые проблемы, но создали другие. Другое дело, что я не могу комментировать другие посты из-за низкой репутации (нуб), если бы я мог это сделать, я бы не стал публиковать новый вопрос.
Я создаю веб-сайт с навигационной панелью с различными страницами для каждой части сайта: Home.html, AboutUs.html...
Я реализовал панель навигации, но я думаю, что это не очень хорошее решение вставлять один и тот же код панели навигации на каждую страницу, поэтому я искал способ ее оптимизации.
Сейчас я создал другой сайт (Navbar.html) и добавил его на другие страницы, и он выглядит хорошо:
<script>
$(function(){
$("#navbar").load("Navbar.html");
});
</script>
и внутри тела:
<div id="navbar"></div>
Проблема возникла при попытке автоматизировать "активный" класс. Для этого я попробовал и data-toggle='tab', и data-toggle='pill', но в обоих случаях активная версия изменилась, но при нажатии кнопки веб-сайт не изменился. Есть код:
<ul class="nav navbar-nav" >
<li class="menuText"><a href="Home.html" data-toggle="tab" >Home</a></li>
<li class="menuText"><a href="AboutUs.html" data-toggle="tab" >About Us</a></li>
<li class="menuText"><a href="Donate.html" data-toggle="tab" >Donate</a></li>
<li class="menuText"><a href="Volunteer.html" data-toggle="tab" >Volunteer</a></li>
<li class="menuText"><a href="Contact.html" data-toggle="tab" >Contact</a></li>
</ul>
Я также попытался перенаправить его с помощью файла.js:
$('#home').load('Home.html');
$('#aboutus').load('AboutUs.html');
$('#donate').load('Donate.html');
$('#volunteer').load('Volunteer.html');
$('#contact').load('Contact.html');
он работал отлично и менял страницы при нажатии на кнопку, но я обнаружил, что если прокручивать страницу внизу, то там появляется первая страница, которую я постоянно открываю под изменяющейся страницей. (трудно объяснить это, надеюсь, вы поняли)
Я также попытался добавить множество функций, найденных в Интернете, но я не знал, работают ли они. Я думаю, что я не реализовал их правильно или не в том месте. Я нуб в HTML. Я действительно не знаю, как вызвать функцию:S Пример:
$(function(){
var hash = window.location.hash;
hash && $('ul.nav a[href="Home.html"]').tab('show');
$('.nav-tabs a').click(function (e) {
$(this).tab('show');
var scrollmem = $('body').scrollTop();
window.location.hash = this.hash;
$('html,body').scrollTop(scrollmem);
});
});
Можно ли как-нибудь это сделать или каким-то другим способом автоматизировать "активный" класс на каждой странице?
Спасибо за ваше время
1 ответ
Это должно дать вам то, что вы хотите:
$(function() {
var mynavbar = $("#navbar"); //cache it
mynavbar.load("Navbar.html");
// remove any current active if found in markup:
mynavbar.find('ul.nav li').removeClass('active');
var url = window.location;// get location
// add the active class to current url detected href
// Will work for absolute hrefs, might have to adjust for others
mynavbar.find('ul.nav li').find('a').filter(function() {
return (url.href.indexOf(this.href) != -1);
}).parent().addClass('active');
// put the click handler for the navigation in place
mynavbar.on('click', 'ul.nav li', function() {
var myhref = $(this).find('a').attr('href');
// just for debug alert("proceed to: " + myhref);
window.location.href = myhref;
});
});
ПРИМЕЧАНИЕ. Если вы хотите просто использовать текущую страницу, загружая содержимое в хешированную область, это не так. В этом случае вам нужно будет переделать это и изменить эту строку:
window.location.href = myhref;
Например:
$('#mycontentcontainer').load(myhref);
Если вы хотите использовать контент с вкладками и загружать контент только по клику, это тоже можно сделать (но вы сказали, что хотите перейти на НОВУЮ страницу, поэтому я этого не включил)
РЕДАКТИРОВАТЬ: ПРИМЕЧАНИЕ: Заглядывая в будущее, решение выше с load
может работать не во всех случаях (медленная загрузка)... поэтому используйте это вместо: Обрабатывайте `nav только после загрузки.
function addActiveNavbar(mynavbar) {
// remove any current active if found in markup:
mynavbar.find('ul.nav li').removeClass('active');
var url = window.location; // get location
// Will work for absolute hrefs, might have to adjust for others
mynavbar.find('ul.nav li').find('a').filter(function() {
return (url.href.indexOf(this.href) != -1);
}).parent().addClass('active');
}
$(function() {
var mynavbar = $("#navbar"); //cache it
addActiveNavbar(mynavbar);
$.get("Navbar.html")
.done(function(data) {
mynavbar.html(data);
// add the active class to current url detected href
addActiveNavbar(mynavbar);
});
// put the click handler for the navigation in place
mynavbar.on('click', 'ul.nav li', function() {
var myhref = $(this).find('a').attr('href');
// un-comment for debug alert("proceed to: " + myhref);
window.location.href = myhref;
});
});