【问题标题】:data-toggle='tab' or ='pills' not allowing the url to workdata-toggle='tab' 或 ='pills' 不允许 url 工作
【发布时间】:2016-03-08 17:35:12
【问题描述】:

首先,我想说的是,我在网上阅读了很多关于它的信息,所有解决方案都发现我无法正确实施它们,有些修复了一些问题,但又产生了其他问题。另一件事是,由于声誉低(菜鸟),我无法评论其他帖子,如果我可以这样做,我不会发布新问题。

我正在创建一个带有导航栏的网站,该网站的每个部分都有不同的页面: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);
        });
    });

无论如何我可以做到这一点,或者用另一种方法来自动化每个页面中的“活动”类吗?

感谢您的宝贵时间

【问题讨论】:

  • 只是努力给自己一些声誉。您现在就可以这样做,只需详细填写您的个​​人资料。 :) 找到另一个您感兴趣的 StackOverflow 站点,在那里注册:在这里找到一个:stackexchange.com/sites 然后回答一些问题(选择一些您认为可以回答的简单问题;或者您知道的一些困难问题)。做这些事情,您将获得足够的声誉来发布 cmets。
  • 要明确一点:您希望导航到新页面(顺便说一下,这些页面不是“站点”)还是希望将内容部分替换为新页面内容?
  • 抱歉我不是英语 xD 我想去一个新的页面 :)

标签: javascript html twitter-bootstrap tabs nav-pills


【解决方案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;
  });
});

【讨论】:

  • 谢谢。对不起,我是一个菜鸟,所以:我该把这个功能放在哪里?在 navbar.html 作为脚本头里面?如果是这样,它会自动工作还是我必须以某种方式调用它?
  • 把它放在一个 .js 文件的某个地方,并在你的 jQuery 链接之后在文档中放置一个链接。将该链接放在需要它的每个页面上。因为这是在文档就绪$(function() { 包装器中,所以它在加载并且文档就绪事件触发并且您不必专门调用它时运行 - 文档就绪事件处理程序触发它。 $(function() { 与您看到的地方的$(document).ready(function() { 相同。或者如果它更有意义:$(document).on('ready', function() { 这只是一个包装器。
  • 非常感谢 MUUUUUCHHHHH!!!!最后一件事是,当我更改页面时,会打开一个窗口,提示页面将要更改。它对用户有好处(我应该保留它)还是我可以把它拿走?我要怎么感谢你?有没有什么方法可以给你点名声或其他东西?
  • 我修复了 href 问题,它使用的是 window.location 而不是 window.location.href,它需要一个字符串 (href) 而不是 location 对象。 developer.mozilla.org/en-US/docs/Web/API/Location 我还调整为将突出显示放在任何“当前”导航栏上,但它被 .get 取代,并且可能没有任何用处。我通过将代码移动到一个更好的函数来做到这一点,然后在准备好文档时调用它......注意:使用第二个代码集。
  • 我使用 deferred 设置了一个 get 的模拟来测试最新的:jsfiddle.net/MarkSchultheiss/301oy70u/1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 2018-11-06
  • 1970-01-01
相关资源
最近更新 更多